• ベストアンサー

Firefoxでxml読み込み

htmlとjavaScriptでかいてます. IEでやるとうまくいくのですが,Firefoxだとうまくできません. alertは確認のためにいれてしました. xml_doc.loadがうまくできないみたいです. function Get_LocalSearch(){ //フォームに入力された住所をエンコード address = encodeURI(document.form1.address.value); // DOMオブジェクト生成 if (document.all) { //IE xml_doc = new ActiveXObject("Microsoft.XMLDOM"); } else { // firefox xml_doc = document.implementation.createDocument("", "", null); } xml_doc.async = false; alert("1"); (←ここはでる) // ローカルサーチの呼び出し(XMLの読み込み) xml_doc.load("http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?appid=*** &p=" + address); alert("2");   (←これがでない)         ・         ・        }       <form name="form1"> 住所・郵便番号・施設・駅<br> <input type="text" name="address" size=30> <input type="button" value="検索" onClick="Get_LocalSearch()">     </from></br>

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

firefoxの場合は、 XmlObj = new XMLHttpRequest(); だと思いますが。これでも、読み込むXMLが同じサイトに無いと、"Access to restricted URI denied"となって、だめなはずです。 クロスドメインアクセスの禁止をJAVASCRIPTだけで回避する方法として、 「JSON SCRIPT TAG アクセス」という手法があります。 これは<script></script>のタグ内には、外部サイトのデータを入れられる事を利用して、<script></script>内にJSON形式のデータを取り込みコールバック関数でアクセスする訳です。幸いにもYahooローカルサーチのHTTPリクエストはJSON形式のリクエストも可能ですから、この方法が使えそうです。 (※直接XMLオブジェクトとしては扱えません) 「JSON SCRIPT TAGアクセス」を手っ取り早く実装するには、 1.<script>type="text/javascript" src="http://taggy.jpmashup/jsr_class.js"</script> をインクルードしておく。 2.YahooへのHTTPリクエスト生成 var req = "http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?appid=***&p=address&o=json&datum=wgs"; 3.SCRIPTタグ生成 oJsr = new JSONscriptRequest(req + "&name=GetJsonObj"); oJsr.buildScriptTag(); oJsr.addScriptTag(); 4.コールバック関数準備 function GetJsonObj(data){ alert(data.LocalSearchResult.Count); /* 等 */ oJsr.removeScriptTag(); } こんな感じです、ご参考になればよいのですが。

参考URL:
http://taggy.jp/mashup/samplecode.html
b0000
質問者

お礼

遅くなりましたがありがとうございます

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

「JSON SCRIPT TAGアクセス」の実装(修正) <YahooローカルサーチAPI利用の場合> 1.<script>type="text/javascript" src="http://taggy.jp/mashup/jsr_class.js"</script>; をインクルードしておく。 2.YahooローカルサーチへのHTTPリクエスト生成 var req = "http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?" + "appid=***" //Yahoo aplication ID + "&p=address" //検索対象(URLエンコードしておく) + "&o=json&callback=GetJsonObj" //JSON要求、コールバック関数名指定 + "&datum=wgs"; //その他のパラメーター 3.SCRIPTタグ生成 oJsr = new JSONscriptRequest(req + "&name=GetJsonObj"); oJsr.buildScriptTag(); oJsr.addScriptTag(); 4.コールバック関数を準備しておく /*コールバック関数の引数に取得したJSON形式のデータがわたされます*/ function GetJsonObj(data){ alert(data.LocalSearchResult.Count); // 件数を表示 oJsr.removeScriptTag(); }

b0000
質問者

お礼

遅くなりましたがありがとうございました

noname#137826
noname#137826
回答No.2

Firebugのconsoleをご覧ください。 あるいは、コード中の該当部分を try { xml_doc.load("​http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?appid=***​ &p=" + address); } catch(e) { alert(e); } のように書き換えてもよいです。 "Access to restricted URI denied"という例外が発生していませんか? そうだとすれば、異なるドメインのファイルにはアクセスできないようするセキュリティー上の仕様です。 残念ながら、そのままではxmlの内容を取得することはできず、サーバで処理する等の工夫が必要になると思います。

b0000
質問者

お礼

遅くなりましたがありがとうございます

  • macchiii
  • ベストアンサー率0% (0/1)
回答No.1

firebug をインストールしてデバッグしてみてください。 おそらくxml_doc.loadでエラーになっていると思います。

b0000
質問者

お礼

遅くなりましたがありがとうございます

b0000
質問者

補足

firebugをインストールしてみました xml_doc.loadでエラーになっているを確認しましたが, 解決方法は何かないでしょうか. よろしくお願いします.

関連するQ&A