2011-04-14 4 views
5

J'ai des problèmes à obtenir les informations géo localisation de google maps apijQuery et Google Maps réponse JSON

le code est assez simple

$.ajax({ 
    type: "GET", 
    cache: false, 
    url: "http://maps.googleapis.com/maps/api/geocode/json", 
    dataType: "jsonp", 
    data: { 
     address: "Ljubljana " + "Slovenia", 
     sensor: "false" 
    }, 
    jsonpCallback:'json_response', 
    success: function(data) { 
     top.console.debug(data); 
     $('#location_setter').dialog('close'); 
    }, 
    error: function() { 
     alert("Error."); 
    } 
}); 


function json_response(data){ 
    alert("works"); 
} 

je reçois toujours une erreur de retour. J'ai essayé directement aussi (je l'ai lu quelque part que le rappel doit être réglé à la fin ...

$.ajax({ 
    type: "GET", 
    cache: true, 
    url: "http://maps.googleapis.com/maps/api/geocode/json?address=Ljubljana Slovenia&sensor=false", 
    dataType: "jsonp", 
    jsonpCallback:'json_response', 
    success: function(data) { 
     top.console.debug(data); 
     $('#location_setter').dialog('close'); 
    }, 
    error: function() { 
     alert("Error."); 
    } 
}); 

l'URL de requête est correctement formé:

http://maps.googleapis.com/maps/api/geocode/json?address=Ljubljana%20Slovenia&sensor=false&callback=json_response

et il me donne le bon JSON

s'il vous plaît conseiller!

Vous pouvez 'jouer' avec elle à http://jsfiddle.net/PNad9/

Répondre

2

si elle aide quelqu'un ... je lui ai donné et je change complètement la logique elle-même et maintenant il fonctionne comme prévu:

premier Google Maps I en annexe js dans le corps

var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = 'http://maps.google.com/maps/api/js?sensor=false&callback=get_longlat'; 
     $("body").append(script); 

que vous peut voir que j'ai spécifié la fonction de rappel get_longlat ...

donc je définis cette fonction et utiliser l'objet géocodage de Google

function get_longlat(address){ 

var geocoder = new google.maps.Geocoder(); 

if(!address){ 
    var p = US.get("location_postal"); 
    var c = US.get("location_city"); 
    var a = US.get("location_address"); 
    var address = a + ', ' + p + ' ' + c + ', Slovenia'; 
} 

if (geocoder) { 
    geocoder.geocode({ 'address': address }, function (results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      US.set("location_lat", results[0].geometry.location.lat(), 60); 
      US.set("location_lon", results[0].geometry.location.lng(), 60); 

      $('#location_setter').dialog('close'); 
     } 
     else { 
      console.log('No results found: ' + status); 
     } 
    }); 
} 

}

Les variables à l'intérieur des États-Unis est notre propre espace de noms pour les paramètres USER

espère que cela aide quelqu'un

+0

Merci mon ami, économisez-moi beaucoup de temps. – Jack

0

J'ai jeté un coup d'oeil au problème mais je ne peux pas comprendre ce qui se passe. Une chose que j'ai trouvée était que si j'ajoute un paramètre de données à l'erreur et alerte (data.status) il donne le code 200. Le seul endroit où je pourrais trouver ceci était de le résoudre au code de succès pour v2 ?!

error: function(data) { 
    alert(data.status); 
} 

Je ne suis pas sûr que vous pouvez également utiliser cette jsonp parce que la lecture de la documentation, il semble mettre paramaters supplémentaires sur la chaîne de requête? Quand j'ai enlevé le jsonpcallback et changé le type de données à json le code de réponse a commencé à dire 0.

Pas beaucoup d'aide désolé mais je dois aller travailler maintenant.

1

Here is a good post pourquoi vous éprouviez le comportement de la question initiale. L'URL à laquelle vous faites une requête sur google at (http://maps.googleapis.com/maps/api/geocode/json) ne renvoie pas de réponse jsonp parseable, elle renvoie simplement un objet JSON brut. Google refuse d'envelopper le JSON dans le rappel fourni. Le correctif pour cela, plus ou moins de ce que je peux dire, est de faire votre demande à cette adresse URL: http://maps.google.com/maps/geo et d'inclure une clé API Google Maps dans votre demande. De plus, il semble nécessaire de s'assurer que le paramètre callback de la requête est le dernier paramètre de la chaîne de requête.

Voici un jsFiddle d'une réponse analysable du service (même si elle retourne une erreur parce qu'il n'y a pas de clé API Google Maps valide fournie): http://jsfiddle.net/sCa33/

L'autre option est de faire ce que vous avez déjà fait, semble-t-il, et utilise l'objet Geocoder de Google pour lancer la requête.

0
function codeAddress(address, title, imageURL) { 
      console.log(address); 

      geocoder.geocode({'address': address}, function (results, status) { 
       console.log(results); 
       if (status == google.maps.GeocoderStatus.OK) { 
        map.setCenter(results[0].geometry.location); 

         var marker = new google.maps.Marker({ 
          map: map, 
          position: results[0].geometry.location, 
          icon: "", 
          title: title 
         }); 

        /* Set onclick popup */ 
        var infowindow = new google.maps.InfoWindow({content: title}); 
        google.maps.event.addListener(marker, 'click', function() { 
         infowindow.open(marker.get('map'), marker); 
        }); 
       } 
       else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { 
        setTimeout(function() { 
         codeAddress(address, title, imageURL); 
        }, 250); 
       } else { 
        alert("Geocode was not successful for the following reason: " + status); 
       } 
      });