Je crois que j'ai un problème de synchronisation avec les résultats du géocodeur. Voir un extrait de code ci-dessous. Je fais essentiellement un géocode et j'obtiens le résultat. Je passe ensuite le résultat à une méthode côté serveur via l'appel jQuery AJAX. Enfin, le résultat de la méthode renvoie un objet JSON. En fonction du résultat, je peux ou non effectuer un deuxième géocode. Là est le problème.Google Geocoder Asynchronous Issue
Vous pouvez voir que j'ai une variable hasResult
par défaut à false, et est basculée à true lorsqu'un résultat valide a été déterminé. Dans tous les cas, cela fonctionne parfaitement, sauf lorsque le besoin d'un deuxième géocode se produit. Le géocode se passe avec succès et le code s'exécute, mais la vérification finale hasResult
renvoie toujours false. Comment se peut-il?
var hasResult = false;
geocoder.geocode({ "address": address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
$.ajax({
url: "URL",
type: "POST",
dataType: "json",
data: results
contentType: "application/json; charset=utf-8",
success: function (result) {
if (result.Valid) {
hasResult = false;
//Some other code, works perfect
} else {
geocoder.geocode({ "address": result.ValidRequest }, function (resultsNew, statusNew) {
if (statusNew == google.maps.GeocoderStatus.OK) {
hasResult = false;
//Some other code, works perfect
}
});
}
});
});
}
});
}
});
if (hasResult == true) {
alert('Success');
} else {
alert('Fail');
}
Merci
Alors, que Vous dites que le géocodeur est appelé, mais le script continue jusqu'à la déclaration conditionnelle et le reste se termine. Fait sens, pouvez-vous fournir une maquette de ce que vous proposez? –
@Dusting J'ai ajouté un exemple brut pour vous montrer comment cela peut être fait. La fonction 'Callback' (en fait, la fonction 'successOrFailure') est exécutée après que vous ayez su si vous avez échoué ou réussi. Adaptez-le à vos besoins. Est-ce que ça marche pour toi? – Tadeck
PARFAIT !!! Parfois, la solution est facile. –