Czy ktoś może mi pomóc?
Nie jestem w stanie zrozumieć różnicy między success
i .done()
of $.ajax
.
Jeśli to możliwe, proszę podać przykłady.
jquery
jquery-deferred
Poonam Bhatt
źródło
źródło
Odpowiedzi:
W skrócie, oddzielenie funkcji wywołania zwrotnego sukcesu od funkcji ajax, aby później można było dodać własne programy obsługi bez modyfikowania oryginalnego kodu (wzorca obserwatora).
Więcej szczegółowych informacji można znaleźć tutaj: https://stackoverflow.com/a/14754681/1049184
źródło
success:
używaną jako parametr a.success()
metodą w plikujqXHR
. Ten ostatni jest przestarzały, ale o to pierwsze pytał OP.success
uruchamia się tylko wtedy, gdy wywołanie AJAX powiedzie się, tj. ostatecznie zwraca stan HTTP 200.error
uruchamia się, jeśli się nie powiedzie icomplete
po zakończeniu żądania, niezależnie od powodzenia.JQuery 1,8 na
jqXHR
przedmiot (zwracany przez$.ajax
)success
został zastąpiony przezdone
,error
wfail
icomplete
zalways
.Jednak nadal powinieneś być w stanie zainicjować żądanie AJAX przy użyciu starej składni. Więc te robią podobne rzeczy:
Ta zmiana ma na celu zapewnienie zgodności z odroczonym obiektem jQuery 1.5 . Deferred (a teraz
Promise
, który ma pełną natywną obsługę przeglądarek w Chrome i FX) pozwala na łańcuchowe działania asynchroniczne:Ten łańcuch funkcji jest łatwiejszy do utrzymania niż zagnieżdżona piramida wywołań zwrotnych
success
.Należy jednak pamiętać, że
done
jest to obecnie przestarzałe na rzeczPromise
składni, którathen
zamiast tego używa :Warto to przyjąć, ponieważ
async
iawait
rozszerza obietnice ulepszonej składni (i obsługi błędów):źródło
success
, w jQuery 1.8 zostało zastąpione przezdone
. Działają w ten sam sposób, aledone
są bardziej spójne z resztą jQuery..done
był wczesny (i teraz ślepy zaułek) jQuery pchnięcie na to, co się stałoPromise
i teraz ma dość kompleksową obsługę języków. W nowych projektach używałbymconst response = await fetch(...)
zamiast tego..success()
jest wywoływany tylko wtedy, gdy serwer WWW odpowie 200 OK nagłówkiem HTTP - w zasadzie, gdy wszystko jest w porządku.Wywołania zwrotne dołączone do done () zostaną uruchomione, gdy odroczony zostanie rozwiązany. Wywołania zwrotne dołączone do fail () zostaną uruchomione, gdy odroczony zostanie odrzucony.
źródło
success
to wywołanie zwrotne, które jest wywoływane, gdy żądanie się powiedzie i jest częścią$.ajax
połączenia.done
jest faktycznie częściąjqXHR
obiektu zwróconego przez$.ajax()
i zastępujesuccess
w jQuery 1.8.źródło