2009-05-22 7 views
8

Google offre une magnifique interface REST pour le géocodage et le géocodage inversé d'une adresse. Ma clé API est valide et si j'entre la demande directement dans l'adresse du navigateur, cela fonctionne très bien. Cependant, la jquery suivante échoue terrible et je ne vois pas pourquoi. En espérant que tu pourrais m'aider ici.en utilisant jquery.getJson avec le service 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); 
    }); 

Interface REST de Google doc pour ce service: http://code.google.com/apis/maps/documentation/geocoding/index.html

Répondre

18

Le problème ici est que je ne le rappel JSONP spécifiant. Le code correct est le suivant

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

Cela fonctionne parce que vous spécifiez vous-même le paramètre 'callback' à la fin de la requête, mais si vous laissez jQuery gérer (en spécifiant 'dataType: 'jsonp'') il ne sera pas, s'il vous plaît voir: http://blog.mikecouturier.com/2011/03/fix-jquery-jsonp-request-to-google-maps.html –

3

En raison des restrictions de sécurité, vous ne pouvez pas envoyer une requête AJAX à une URL d'une page dans un autre domaine. C'est pourquoi cela fonctionne si vous entrez l'URL dans le navigateur, mais pas si vous essayez de faire la demande à partir de votre code javascript.

Une solution de contournement consiste à utiliser un server side component acting as a proxy: il reçoit vos demandes AJAX et les envoie au géolocalisateur google.

+1

Selon le site Web de JQuery, $ .getJSON a prise en charge native de la demande JSONP. Ainsi, il ne devrait pas être nécessaire pour ledit proxy – Scott

+2

Aucun problème tant que l'URL distante que vous appelez prend en charge JSONP. Google a désactivé JSONP pour V3 de l'API GeoCoding mentionné ci-dessus. –

+0

JSONP est un travail autour de la sécurité XSS intégrée dans les navigateurs, cela a commencé comme une faille de sécurité mais est maintenant si largement utilisé que je ne les vois jamais le réparer. –

0

ajouter une fonction d'erreur

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

et essayer de déboguer si elle est juste une erreur liée à JSON

Questions connexes