Wie Holen mehrere Rückgabewerte aus einer JavaScript-Funktion
Habe ich JavaScript-Funktion aufrufen, um changeMapLocation
Funktion, wo ich zurückgeben möchten die Variablen lat
und long1
. Ich habe einige Probleme im code, um wieder diese zwei Variablen und alert-Funktion.
var sample = changeMapLocation(state);
alert(sample.lat1);
alert(sample.lat2);
function changeMapLocation(state) {
var addressval=state;
var address;
var url;
var googleUrl= "http://maps.google.com/maps/api/geocode/json?";
var sensor = "&sensor=false";
if(addressval != null && addressval !="" && addressval.length!=0) {
address = "address="+encodeURIComponent(addressval);
$.ajax({
url:googleUrl+address+sensor,
type:"POST",
dataType:"json",
success:function(longlatJson) {
var jsonObj = JSON.parse(JSON.stringify(longlatJson));
var lat = jsonObj.results[0].geometry.location.lat;
var long1 = jsonObj.results[0].geometry.location.lng;
alert(lat);
alert(long1);
//var latlng = new google.maps.LatLng(lat,long1);
//alert(latlng);
},
error:function(){alert("unable to conect to google server");}
});
}
return(lat1:lat,lat2:long1);
}
InformationsquelleAutor mahesh | 2010-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie ein größeres problem. Sie sind dem Aufruf der asynchronen
$.ajax()
Methode, wo die callback-Funktion wird aufgerufen werden, nachdem IhrechangeMapLocation()
- Funktion gibt, und daher Ihre Funktion nicht so funktioniert, wie Sie erwarten. Befolgen Sie die Kommentare in dem Beispiel unten:Sollten Sie refactoring Ihres Codes in einer Weise, dass die Logik zum verarbeiten der ajax-response ist in der
success
Rückruf. Beispiel:Beachten Sie, dass
changeMapLocation()
nichts zurück mehr. Es wird ändern Sie einfach die Position auf der Karte auf seine eigene, wenn der server antwortet auf die Ajax-Anfrage.Darüber hinaus beachten Sie, dass Ihre
lat
undlong1
Variablen wurden eingeschlossen in den Umfang dersuccess
innere Funktion, und konnte nicht aufgerufen werden, die von der äußeren Funktion.InformationsquelleAutor Daniel Vassallo
Wickeln Sie beide in ein einziges Objekt, und dieses Objekt zurückgeben,:
Dann in Ihrer Funktion aufrufen:
InformationsquelleAutor desau
Können Sie nur einen einzelnen Wert zurückgeben. Dieser Wert kann ein Objekt, aber die syntax verwendet
{}
nicht()
.- Und Asynchronous JavaScript und XML-ist Asynchrone. Soweit die aufrufende Funktion betroffen ist, ist es Feuer und vergessen, Sie nicht bekommen, um einen Wert zurückzugeben.
Ihren Rückruf hat, um die Aufgabe abzuschließen, kann es nicht geben, die Daten zurück um etwas anderes, um es zu vollenden.
InformationsquelleAutor Quentin
Oder die etwas längere version, die ein wenig mehr lesbar
InformationsquelleAutor Daveo
Um mehrere Werte zurückgeben, die Sie benötigen, um ein Objekt zu erstellen.
Neben, dass dieser code nicht funktionieren würde, da
$.ajax()
schafft eine asynchronen Anfrage, Brände, die später als Ihrereturn statement
tut.So benötigen Sie zum aufrufen Ihrer eigenen callback. wie
und dann nennen Sie es wie
wenn Sie den code verwenden, den ich hier vorgeschlagen wird, es wird nicht undefiniert (zweite Beispiel, Rückruf).
Ich danke Ihnen sehr viel ich änderungen an code, wie Sie schlug Ihre wunderbar funktioniert, nochmals danke für deine Antwort
InformationsquelleAutor jAndy
Wie bereits in anderen Antworten, mit asynchronen aufrufen, werden Sie nicht bekommen, die Werte sofort nach Ihrem Anruf Ajax, da ajax-Aufruf noch nicht abgeschlossen haben. so bekommen Sie die Werte als undefiniert. Sie haben zwei Optionen:
Option 1:
Verschieben der Vorgänge, die Sie tun, mit den Rückgabewerten von ajax in der Erfolgs-callback-Funktion der ajax-call. Sehen jAndy oder Daniel Vassallo Antwort.
Option 2: (async: false)
Können Sie den Anruf zu tätigen, um synchron durch die Einstellung der option
async: false
für ajax() Funktion. Dann würde diese Methode blockiert, bis die Antwort empfangen wird, und wenn es abgeschlossen ist, haben Sie die Werte initialisiert durch Ajax.mit der zweiten option, würde der code so Aussehen:
InformationsquelleAutor Marimuthu Madasamy