używam jQuery.Deferred i rejestracji done
, fail
i then
teleskopowe:jQuery odroczony .then() nie jest wywoływana po .fail()
$.when(some_ajax(url))
.done(function(result){})
.fail(function(){})
.then(function(){}); //just like that, with a single parameter
Odkryłam, że kiedy mój ajax call succeeds, done
i then
wywołania zwrotne są wywoływane w tej kolejności. Jednak gdy ajax zawiedzie, wywołanie zwrotne fail
jest wywoływane, ale nie dostaję się do wywołania zwrotnego then
.
Przeczytałem dokumentację jQuery.Deferred, ale nie mogłem znaleźć wskazówki dotyczącej przyczyny tego zachowania.
Podczas korzystania always
zamiast then
, nazywa się to w obu przypadkach - sukces i porażka (pierwsza done
/fail
nazywa, następnie always
nazywa). Dokumentacja nie wydaje się wskazywać na oczekiwaną różnicę między always
i then
w moim opisanym scenariuszu, dlaczego zachowują się inaczej?
wezwanie do 'następnie()' zajmuje się tylko sukces, więc jest całkiem normalne, że nie poradzi sobie z przypadkiem niepowodzenia (myślę, że tak mówi Arun P Johny w swojej odpowiedzi). Czy masz na myśli, że przekazujesz również obsługę fail do 'then()' w twoim aktualnym kodzie? –
@ FrédéricHamidi dziękuję, mam nadzieję, że moje pytanie jest teraz jasne (zredagowane) – Haji
To jest rzeczywiście wyraźniejsze, a odpowiedź Arun jest słuszna: twoje wezwanie do 'then()' odnosi się tylko do sukcesu, a nie do niepowodzenia, więc logiczne jest, aby przewodnik nie w razie awarii. –