Ich benutze jQuery.Deferred und registriere die done
, fail
und then
Handler:
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?
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 ()
>Tags und Links jquery jquery-deferred