2017-07-21 4 views
0

Ich habe viele Male mit jQuery Ajax-Aufruf versucht, aber es Rückgabewert vor der Aktualisierung. Ich habe es gegoogelt und viele Lösungen probiert, die niemand für mich arbeitet, ich bekomme immer undefinierten Wert, weil Funktionsrückgabewert vor dem Ajaxanruf vollständig ist. Jede mögliche Hilfe würde schätzen,Rückgabe undefinierter Wert in jQuery Ajax-Aufruf mit Versprechen

hier ist mein Code

$(document).ready(function() { 
    console.log(secondvalidation()); 
}); 

function onemorevalid() { 
    console.log("working"); 
    //this ajax call return 1 
    return jQuery.ajax({ 
    url: 'handler/email.php', 
    method: 'POST', 
    }); 

} 


function secondvalidation() { 
    onemorevalid1 = new onemorevalid(); 
    onemorevalid1.done(function(data) { 
    console.log("data " + data); 
    return data; 
    }); 
} 

Ausgabe auf Konsole ist

working 
undefined 
data 1 

Antwort

1

Sie machen ein Objekt aus einem Verfahren. Was grundsätzlich falsch ist. Wenn Sie den Wert eines Ajax-Aufrufs an den anschließend aufgerufenen Code übergeben müssen, können Sie auch async:false zu Ihrer Abfrage hinzufügen, damit der Code auf die Ajax-Antwort wartet.

Stellen Sie sicher, dass Sie die other_function() aufrufen, nachdem die Ajax-Methode in Dokument bereit Funktion aufgerufen wird.

Ich denke also, was Sie brauchen, ist dies:

$(document).ready(function(){ 
var requested_data; 


     var request = $.ajax({ 
     url:'handler/email.php', 
      method:'POST', 
      async:false, 
      dataType: 'text' 
    }); 

    request.done(function(data) { 
     console.log("data " + data); 
requested_data = data 
    }); 



function other_function(){ 
console.log("toing_toing: " + requested_data); 
} 
other_function(); 
    }); 

hier ist eine working example fiddle dieses Codes.

Bitte beachten Sie, dass es andere Möglichkeiten gibt, dies als per this answer zu erreichen. async:false kann dazu führen, dass das Skript erst dann einfriert, wenn die Anfrage abgeschlossen ist und die Anfrage lange gedauert hat, was zu einer schlechten Benutzeroberflächenerfahrung führen würde.

+0

Wie kann ich diese zurückgegebenen Daten in einer anderen Funktion verwenden – Ganesh

+0

@Ganesh bitte überprüfen Sie die aktualisierte Antwort –

+0

Danke @toing_toing, Ihre Antwort nützlich, aber wie Sie "async: false" verwenden; es ist veraltet, können wir etwas wie deine Antwort tun, ohne "async: false" zu verwenden; – Ganesh

Verwandte Themen