2009-05-22 8 views
8

Google bietet eine wunderbare REST-Schnittstelle für die Geokodierung und umgekehrte Geokodierung einer Adresse. Mein API-Schlüssel ist gültig, und wenn ich die Anfrage direkt in die Browser-Adresse eingeben, funktioniert es großartig. Die folgende JQuery schlägt jedoch furchtbar fehl und ich verstehe nicht warum. Ich hoffe, du könntest mir hier helfen.Verwendung von jquery.getJson mit dem GeoCoding HTTP-Dienst von Google

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

Googles REST-Schnittstelle doc für diesen Dienst: http://code.google.com/apis/maps/documentation/geocoding/index.html

Antwort

18

Das hier Problem ist, dass ich nicht die JSONP Rückruf wurde angeben. Der korrekte Code ist wie folgt

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

Es funktioniert, weil Sie selbst den Callback-Parameter am Ende der Abfrage angeben, aber wenn Sie jQuery behandeln lassen (durch Angabe von 'dataType: 'jsonp'') wird es nicht, siehe: http://blog.mikecouturier.com/2011/03/fix-jquery-jsonp-request-to-google-maps.html –

3

Aufgrund von Sicherheitseinschränkungen, können Sie nicht eine AJAX-Anforderung an eine URL von einer Seite in einer anderen Domäne senden. Deshalb funktioniert es, wenn Sie die URL im Browser eingeben, aber nicht, wenn Sie versuchen, die Anfrage von Ihrem JavaScript-Code zu machen.

Eine häufige Problemumgehung besteht darin, eine server side component acting as a proxy zu verwenden: Sie empfängt Ihre AJAX-Anforderungen und sendet sie an den Google Geolocator.

+1

Nach JQuery-Website, hat $ .getJSON native Unterstützung für JSONP Anfrage. Daher sollte dieser Proxy nicht benötigt werden – Scott

+2

Kein Problem, solange die Remote-URL, die Sie anrufen, JSONP unterstützt. Google hat JSONP für V3 der oben erwähnten GeoCoding-API deaktiviert. –

+0

JSONP ist eine Arbeit um die XSS-Sicherheit in Browsern gebaut, das eigentlich als Sicherheitslücke begann, aber jetzt so weit verbreitet ist, sehe ich nicht, dass sie jemals reparieren. –

0

fügen Sie eine Fehlerfunktion

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

und versuchen, zu debuggen, wenn es nur ein json bezogener Fehler ist