11545 sujets

JavaScript, DOM et API Web HTML5

Bonjour, je suis face à un petit problème :

dans ma fonction bp_maps_move_marker, je récupère avec google maps API les coordonnées d'une adresse.
Le problème est que la fonction qui récupère l'adresse (bp_maps_address_to_coords) met un petit temps pour le retourner, et que

if (coords)

dans ma fonction bp_maps_move_marker

retourne false...

Comment "attendre" la réponse de bp_maps_address_to_coords ?


function bp_maps_move_marker(marker,input_address) {

	coords = bp_maps_address_to_coords(address);

	if (coords) {
		console.log(coords);
			var Lat=coords.lat();
			var Lng=coords.lng();
	}
}

function bp_maps_address_to_coords(address) {
	if (geocoder) {
	
	  geocoder.geocode( { 'address': address}, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) {

			coords=results[0].geometry.location;

			console.log("geocode"+coords);
			return coords;

		} else {
		  alert("<?php echo "Geocode was not successful for the following reason:";?> " + status);
		}
	  });
	}
}

Modifié par gordie (07 Feb 2010 - 18:30)
Modérateur
Salut,

D'après ta description, la méthode "geocode" fonctionne en asynchrone, et c'est ce qui te pose problème. Aussi, lorsque tu la renseignes, tu passes une fonction de "callback" en paramètre et c'est au sein de cette dernière que tu peux lancer d'autres fonctions en te servant des données renvoyées par le serveur.

En pratique, cela donne donc :
function bp_maps_move_marker(coords) {
	if(coords) {
			var Lat=coords.lat();
			var Lng=coords.lng();
	}
}

function bp_maps_address_to_coords(address) {
	if(geocoder && address) {
		geocoder.geocode({'address': address}, function(results, status) {
			if(status == google.maps.GeocoderStatus.OK) {
				bp_maps_move_marker(results[0].geometry.location);
			}
			else {
				alert("<?php echo "Geocode was not successful for the following reason:";?> " + status);
			}
		});
	}
}