2009-05-22 7 views
8

Googleは、ジオコーディングと逆ジオコーディングのためのすばらしいRESTインターフェイスを提供しています。私のAPIキーは有効です。ブラウザのアドレスにリクエストを直接入力すると、うまく動作します。しかし、次のjqueryはひどく失敗し、私はなぜ失敗しているのですか。あなたが私を助けてくれると願っています。このサービスのGoogleのGeoCoding HTTPサービスでjquery.getJsonを使用

$.getJSON("http://maps.google.com/maps/geo?q="+ address+"&key="+apiKey+"&sensor=false&output=json", 
    function(data, textStatus){ 
    console.log(data); 
    }); 

GoogleのRESTインターフェイスドキュメント:セキュリティ上の制約のために、http://code.google.com/apis/maps/documentation/geocoding/index.html

答えて

18

であれば、ここでの問題は、私はJSONPコールバックを指定していなかったということである誤差関数に

  error: function(xhr, ajaxOptions, thrownError) { 
      alert("Ajax Error: " + xhr.status + "\nMsg: " + xhr.responseText); 
     } 

を追加し、デバッグしよう。正しいコードは次のとおりです。

$.getJSON("http://maps.google.com/maps/geo?q="+ address+"&key="+apiKey+"&sensor=false&output=json&callback=?", 
    function(data, textStatus){ 
    console.log(data); 
    }); 
+3

あなたがあなたが 'callback'パラメタをクエリの最後に指定しているが、jQueryに'dataType: 'jsonp'')それはしません、参照してください:http://blog.mikecouturier.com/2011/03/fix-jquery-jsonp-request-to-google-maps.html –

3

、あなたは別のドメインのページからURLにAJAXリクエストを送信することはできません。そのため、ブラウザにURLを入力しても動作しますが、javascriptコードからリクエストを作成しようとした場合は動作しません。

一般的な回避策は、server side component acting as a proxyを使用することです:あなたのAJAXリクエストを受け取り、それらをgoogle geolocatorに送信します。

+1

jQueryのウェブサイトによると、$ .getJSONはJSONPリクエストをネイティブでサポートしています。したがって、このProxyの必要はありません。 – Scott

+2

呼び出し元のリモートURLがJSONPをサポートしていれば問題ありません。 Googleは、上記のGeoCoding APIのV3用のJSONPを無効にしています。 –

+0

JSONPは、ブラウザに組み込まれたXSSセキュリティの回避策ですが、これは実際にセキュリティの抜け穴として始まりましたが、今では非常に広く使用されています。 –

0

はそれだけでJSON関連のエラー

0

私は全く同じ問題がありました。これは私が最終的にそれを私のために働かせることができた方法です。

see google maps api docs

関連する問題