2017-03-01 4 views
0

I Ich habe versucht, die Funktion (b) aufzurufen, nachdem die Funktion (a) abgeschlossen wurde. Es erscheint jedoch eine Warnmeldung, bevor die Funktion (a) ausgeführt wird. Ihre brillante Lösung wird respektiert werden.AJAX-Rückruffunktion in Folge

$.ajax({ 
    url : "action.do", 
    .....code.... 
}).done(function(a){ 

    ...code... 

}).then(function(b){ 

    alert("hello"); 

}); 
+1

, was Sie tue in Funktion a() .. ist es ein weiterer Ajax-Aufruf? – Darshak

Antwort

-1

Weil die dann() immer tut vor .done()

.done() nur einen Rückruf hat, und es ist der Erfolg Rückruf

.then() sowohl Erfolg und scheitern Rückrufe

1

done funktioniert nicht wie ein richtiges Versprechen then Funktion funktioniert. Um dies zu tun, würden Sie wollen then verwenden und sicher sein, das Versprechen von dem ajax Aufruf, zum Beispiel zurückzukehren:

$.ajax({ 
    url : "action.do", 
    // .....code.... 
}).then(function(a){ 
// ^^^^ 
    return $.ajax({ 
// ^^^^^^ 
     url : "action.do", 
     // .....code.... 
    }); 
}).then(function(b){ 
    alert("hello"); 
}); 

Ich glaube, Sie brauchen mindestens jQuery v1.8 für diesen, aber doppelt überprüfen mit die Version, die Sie verwenden, gab es eine Menge Arbeit über mehrere Versionen, um jQuery Deferred und Versprechen kompatibel mit der Promises/A + -Spezifikation und (daher) die ES2015 (aka "ES6") -Spezifikationen macht.

-1

.then() wird verwendet, um ein Versprechen zu manipulieren. Es hat 2 Rückrufe, Erfolg und Misserfolg. So getan ist die Erfolgsrückruffunktion von .then().

Sie den Code in zwei der folgenden Arten ändern können:

$.ajax({ 
    url : "action.do", 
    .....code.... 
}).done(function(a){ 

    ...code... 
    alert("hello"); 
}); 

oder

$.ajax({ 
    url : "action.do", 
    .....code.... 
}).then(function(b){ 

    alert("hello"); 

}); 

Idealer .then() ist wie der Code unten:

.then(function(){ 
    ...success case...(.done() scenario) 
},function(){ 
    ...failure case... (.fail() scenario) 
});