Mit $ .post innerhalb einer JavaScript-Funktion kann nicht Wert einer Variablen zuweisen?

StackOverflow https://stackoverflow.com/questions/824431

  •  05-07-2019
  •  | 
  •  

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;

}
War es hilfreich?

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

nennen

Wenn 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top