プロが教えるわが家の防犯対策術!

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 … &p=" + address);
alert("2");   (←これがでない)
        ・
        ・
       }

      <form name="form1">
住所・郵便番号・施設・駅<br>
<input type="text" name="address" size=30>
<input type="button" value="検索" onClick="Get_LocalSearch()">  
  </from></br>

A 回答 (4件)

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 …
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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/20 12:35

「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 …
+ "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();
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/20 12:34

Firebugのconsoleをご覧ください。


あるいは、コード中の該当部分を

try {
xml_doc.load("​http://api.map.yahoo.co.jp/LocalSearchService/V1 …​ &p=" + address);
} catch(e) {
alert(e);
}

のように書き換えてもよいです。

"Access to restricted URI denied"という例外が発生していませんか?
そうだとすれば、異なるドメインのファイルにはアクセスできないようするセキュリティー上の仕様です。
残念ながら、そのままではxmlの内容を取得することはできず、サーバで処理する等の工夫が必要になると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/20 12:35

firebug をインストールしてデバッグしてみてください。


おそらくxml_doc.loadでエラーになっていると思います。

この回答への補足

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

補足日時:2008/09/30 12:00
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/20 12:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!