2009-05-22 10 views
8

Google oferuje wspaniały interfejs REST do geokodowania i odwrotnego geokodowania adresu. Mój klucz API jest ważny i jeśli zgłoszę żądanie bezpośrednio na adres przeglądarki, działa on świetnie. Jednak następujące jquery nie jest straszne i nie rozumiem, dlaczego. Mam nadzieję, że możesz mi pomóc tutaj.za pomocą jquery.getJson z usługą Google GeoCoding HTTP

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

interfejs REST doc Google dla tej usługi: http://code.google.com/apis/maps/documentation/geocoding/index.html

Odpowiedz

18

Problem polega na tym, że nie określając zwrotnego jsonp. Prawidłowy kod jest następujący:

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

Działa, ponieważ podajesz sobie parametr 'callback' na końcu zapytania, ale jeśli pozwalasz jQuery go obsłużyć (poprzez określenie 'dataType: 'jsonp'') nie będzie, zobacz: http://blog.mikecouturier.com/2011/03/fix-jquery-jsonp-request-to-google-maps.html –

3

ze względów bezpieczeństwa, nie można wysyłać żądania AJAX do adresu URL ze strony w innej domenie. Dlatego działa po wpisaniu adresu URL w przeglądarce, ale nie w przypadku próby przesłania żądania z kodu javascript.

Typowym rozwiązaniem jest użycie numeru server side component acting as a proxy: otrzymuje on żądania AJAX i wysyła je do geolokatora google.

+1

Według strony internetowej jQuery, $ .getJSON posiada natywne wsparcie dla życzenie JSONP. W związku z tym nie powinno być potrzeby stosowania wspomnianego Proxy – Scott

+2

Nie ma problemu, o ile zdalny URL, do którego dzwonisz, obsługuje JSONP. Google wyłączył JSONP dla V3 wspomnianego interfejsu API GeoCoding. –

+0

JSONP jest pracą związaną z zabezpieczeniami XSS wbudowanymi w przeglądarki, co faktycznie zaczęło się jako luka w zabezpieczeniach, ale jest teraz tak szeroko stosowane, że nie widzę ich nigdy naprawiania. –

0

dodać funkcji błędu

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

i spróbuj do debugowania, jeśli jest to tylko błąd json związane