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-ID: 217247

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

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

Nobody-Is-Perfect
Nobody-Is-Perfect 18.09.2013 um 14:34:34 Uhr
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
colinardo
colinardo 20.09.2013 aktualisiert um 13:01:58 Uhr
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