2009-05-22 15 views
8

Google ofrece una maravillosa interfaz REST para geocodificar y geocodificar de forma inversa una dirección. Mi clave API es válida, y si ingreso la solicitud directamente en la dirección del navegador, funciona muy bien. Sin embargo, el siguiente jquery falla terriblemente y no veo por qué. Espero que puedas ayudarme aquí.usando jquery.getJson con el servicio HTTP GeoCoding de Google

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

doc interfaz REST de Google para este servicio: http://code.google.com/apis/maps/documentation/geocoding/index.html

Respuesta

18

El problema aquí es que no estaba especificando la devolución de llamada JSONP. El código correcto es el siguiente

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

Está funcionando porque usted especifica el parámetro 'callback' al final de la consulta pero si deja que jQuery lo maneje (especificando 'dataType: 'jsonp'') no, vea: http://blog.mikecouturier.com/2011/03/fix-jquery-jsonp-request-to-google-maps.html –

3

Debido a las restricciones de seguridad, no puede enviar una petición AJAX a una dirección URL de una página en un dominio diferente. Es por eso que funciona si ingresas la URL en el navegador, pero no si intentas realizar la solicitud desde tu código de JavaScript.

Una solución común es utilizar un server side component acting as a proxy: recibe sus solicitudes de AJAX y las envía al geolocalizador de google.

+1

De acuerdo con la página web de jQuery, $ .getJSON tiene soporte nativo para la solicitud JSONP. Por lo tanto, no debería haber necesidad de dicha Proxy – Scott

+2

No hay problema, siempre y cuando la URL remota a la que llama sea compatible con JSONP. Google ha inhabilitado JSONP para V3 de la API de GeoCoding mencionada anteriormente. –

+0

JSONP es una solución a la seguridad XSS incorporada en los navegadores, esto en realidad comenzó como una laguna de seguridad, pero ahora es tan ampliamente utilizado que no creo que lo hayan solucionado. –

0

añadir una función de error

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

y tratar de depurar si es sólo un error relacionado con JSON

Cuestiones relacionadas