mabue88
Goto Top

Wie asynchroner Request in Funktion verwenden

Hallo,

ich nutze den Geocoder von Google um die Koordinaten zu einer Adresse zu erhalten. Der Request erfolgt dabei asynchron. Ich will aber eine Funktion erstellen, der ich die Adresse übergebe und als Antwort dir dazugehörigen Koordinaten erhalten. Hat jemand einen Tipp dafür?

So weit bin ich bis jetzt:
[code]
function KoordinatenInAdresseUmwandeln(adresse) {
var geocoder = new google.maps.Geocoder();

geocoder.geocode({ 'address': adresse }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
koordinaten = new google.maps.LatLng(results.geometry.location.lat(), results.geometry.location.lng());
}
else
alert('error: ' + status);
});

return "noch nichts";
}
[/code]

Content-Key: 217247

Url: https://administrator.de/contentid/217247

Printed on: April 18, 2024 at 16:04 o'clock

Member: Nobody-Is-Perfect
Nobody-Is-Perfect Sep 18, 2013 at 12:34:34 (UTC)
Goto Top
Hi mabue88,

Du versuchst hier aus dem asynchronen Schema auszubrechen.

Im Normalfall würde man der function einfach das Ziel des Ergebnisses mitteilen, z.B. die ID des DOM - Elements
und in der Ergebnisfunktion "function (results, status) {" das Element suchen und den Wert setzen.
Dann bleibt alles schön asynchron und die Funktion selbst hat keine Rückgabe.

Wenn man jedoch auf die Ausführung warten muss, kann man sich mal unter dem Stichwort "Deferred" bei jQuery schlau machen.


Grüße vom Nobody
Member: colinardo
colinardo Sep 20, 2013 updated at 11:01:58 (UTC)
Goto Top
Hallo mabue88,
du könntest deine "Function" so gestalten um sie an mehreren Stellen in deinem Code zu verwenden:
getCoords = function(adresse, f){
	var geocoder = new google.maps.Geocoder();
	geocoder.geocode({ 'address': adresse }, function (results, status) {  
		if (status == google.maps.GeocoderStatus.OK) {
			koordinaten = new google.maps.LatLng(results.geometry.location.lat(), results.geometry.location.lng());
			f("OK",koordinaten);  
		} else {
			f("ERROR",status);	  
		}
	});
}
Um dann die Koordinaten abzufragen benutzt du folgenden Aufruf welchen du in dein synchrones Schema einbauen kannst.
getCoords("Berlin", function(status,result) {  
	if (status == "OK"){  
                // die variable 'result' enthält hier die Koordinaten 
	}else{
		// die Variable 'result' enthält hier den Fehler;	 
	}
});

Grüße Uwe