Mit $ .post innerhalb einer JavaScript-Funktion kann nicht Wert einer Variablen zuweisen?
Frage
Ich versuche $ .post innerhalb einer Funktion zu verwenden, um die Ergebnisse zu bekommen, dann die Funktion wahr oder falsch zurückgeben basierend auf den Ergebnissen des $ .post Rückrufs. Allerdings scheint der Rückruf nach der Rückkehr Ereignisse der übergeordneten Funktion auftreten.
Hier ist der aktuelle Code der ret Variable immer nicht definiert ist, aber wenn ich alert () innerhalb der Callback-.post $, es gibt das richtige Ergebnis;
function elementExists(key, type, path, appid, pid){
var ret;
$.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
ret = data;
});
alert(ret);
return ret;
}
Lösung
Wenn Sie die Post entdeckt haben wird asynchron ausgeführt. Wenn Sie es synchron sein wollen, müssen Sie die ajax
verwenden Methode und die async
Parameter auf falsch gesetzt. Es wäre jedoch besser, zu erkennen, dass die Post asynchron ist und den Code zu bauen, so dass die Aktion durch den Rückruf durchgeführt, unabhängig von der Methode ist, dass die Post aufruft. Natürlich wollen Sie wirklich etwas anderes als die Warnung zu tun, aber ohne zu wissen, was es ist schwer, Sie zu beraten, wie man das Refactoring.
Bearbeiten : Ich verstehe, dass Ihr Code zu sehen ist, zu überprüfen, ob es etwas gibt, aber es ist, dass für einen bestimmten Zweck zu prüfen. Wenn wir wüssten, was der Zweck war, dann könnte es möglich sein, zu empfehlen, wie das in dem Rückruf zu erreichen, so dass die Methode Refactoring werden.
Andere Tipps
function elementExists(key, type, path, appid, pid){
$.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
alert(data);
});
}
die Funktion (Daten) ist ein Rückruf (Asynchronous) Sie nicht Werte wie das zurückgeben können.
es, dass Rückruf wird nicht aufgerufen, bis die Seite mit dem Namen getan wird, aber Ihr „return ret“ ausgeführt wird, nachdem Sie sofort $ .post
nennenWenn Sie wollen, dass es syncronous Satz async gesetzt: false
Lesen Sie die Dokumentation http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype
Das Problem ist, dass Ihr Code wird asynchron ausgeführt. Das heißt alert (ret) aufgerufen wird tatsächlich vor ret = Daten, was passiert, wenn die Ajax-Anfrage abgeschlossen ist.
Sie können entweder machen Sie Ihre Ajax-Aufrufe synchron (nicht empfohlen) mithilfe der async Option oder Ihren Code neu zu gestalten.