J'essaie d'utiliser le Google géocoder API V3 pour tracer un emplacement sur une carte basée sur une adresse spécifiée par l'utilisateur, le code est ci-dessous.Google Maps géocode API V3 ne pas retourner le résultat dans la fonction javascript
Lorsque je fais une demande directement (par exemple à http://maps.googleapis.com/maps/api/geocode/json?address=peterborough&sensor=false) j'obtiens la réponse attendue. Cependant, lorsque je fais la même requête en utilisant le code ci-dessous, la variable midpoint est toujours indéfinie après la fermeture de la fonction getLatLong.
Que fais-je incorrectement?
function loadFromSearch(address)
{
midpoint = getLatLong(address);
mapCentre = midpoint;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
function getLatLong(address)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
$.getJSON(url,
function (data){
if (data.status == "OK")
{
result = data.results[0].geometry.location;
}
});
return result;
}
=========================================== ==============================================
À la lumière des réponses, j'ai maintenant mis à jour le code à ce qui suit. Je ne reçois toujours aucun résultat, avec des points d'arrêt définis dans Firebug le result = data.results [0] .geometry.location; ne se fait jamais toucher.
function loadFromSearch(address)
{
midpoint = getLatLong(address, loadWithMidpoint);
}
function getLatLong(address, callback)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
$.getJSON(url,{},
function (data) {
if (data.status == "OK")
{
result = data.results[0].geometry.location;
callback(result);
}
});
}
function loadWithMidpoint(centre)
{
mapCentre = centre;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
=========================================== =====================================
Je l'ai! Le code final, qui fonctionne, ressemble à ceci:
function loadFromSearch(coordinates, address)
{
midpoint = getLatLong(address, latLongCallback);
}
function getLatLong(address, callback)
{
var geocoder = new google.maps.Geocoder();
var result = "";
geocoder.geocode({ 'address': address, 'region': 'uk' }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
result = results[0].geometry.location;
latLongCallback(result);
}
else
{
result = "Unable to find address: " + status;
}
});
return result;
}
function latLongCallback(result)
{
mapCentre = result;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
Merci Brady, j'ai essayé cette approche mais le résultat ne renvoie toujours jamais une valeur autre que celle avec laquelle il a été initialisé. – Jason
@jibberish - Vous devez avoir quelque chose qui ne va pas ailleurs parce que si je cours getLatLong ("York"), il renvoie 53.9577018, -1.0822855 – Brady
Je dois en effet. Je peux aller aussi loin que la ligne geocoder.geocode dans le débogueur, puis passer directement l'appel de la fonction au retour. Va continuer à brancher je suppose! – Jason