jQuery Deferred .then () wird nicht nach .fail () aufgerufen.

8

Ich benutze jQuery.Deferred und registriere die done , fail und then Handler:

%Vor%

Ich habe festgestellt, dass, wenn mein Ajax-Aufruf erfolgreich ist, done und then Callbacks in dieser Reihenfolge aufgerufen werden. Wenn jedoch der Ajax fehlschlägt, wird der fail -Rückruf aufgerufen, aber ich komme nicht zum then -Rückruf.

Ich habe die jQuery.Deferred-Dokumentation gelesen, konnte aber keinen Hinweis auf den Grund für dieses Verhalten finden.

Bei Verwendung von always anstelle von then wird in beiden Fällen aufgerufen - Erfolg und Fehler (zuerst done / fail wird aufgerufen, dann wird always aufgerufen). Die Dokumentation scheint keinen erwarteten Unterschied zwischen always und then in meinem beschriebenen Szenario anzuzeigen, warum verhalten sie sich anders?

    
Haji 21.04.2013, 08:07
quelle

1 Antwort

19

Die Syntax von .then() ist .then (successCallback, failureCallbacl) deshalb im Erfolgsfall beides werden aufgerufen und im Fehlerfall wird nur fail aufgerufen.

In Ihrem Fall übergeben Sie nur einen Callback an die .then() -Methode, dieser wird als Erfolgsrückruf registriert, Sie haben also zwei Erfolgsrückrufe, die mit done() und einer weiteren mit .then() registriert wurden. Aber für den Fall des Fehlers haben Sie nur einen Callback registriert mit .fail()

Wenn Sie möchten, dass ein Rückruf unabhängig vom Erfolg / Fehler aufgerufen wird, verwenden Sie .always ()

>     
Arun P Johny 21.04.2013, 08:10
quelle

Tags und Links