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.
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.
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
success:
używaną jako parametr a .success()
metodą w pliku jqXHR
. 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 i complete
po zakończeniu żądania, niezależnie od powodzenia.
JQuery 1,8 na jqXHR
przedmiot (zwracany przez $.ajax
) success
został zastąpiony przez done
, error
w fail
i complete
z always
.
Jednak nadal powinieneś być w stanie zainicjować żądanie AJAX przy użyciu starej składni. Więc te robią podobne rzeczy:
// set success action before making the request
$.ajax({
url: '...',
success: function(){
alert('AJAX successful');
}
});
// set success action just after starting the request
var jqxhr = $.ajax( "..." )
.done(function() { alert("success"); });
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:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
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 rzecz Promise
składni, która then
zamiast tego używa :
$.ajax("parent").
then(function(p) { return $.ajax("child/" + p.id); }).
then(someOtherDeferredFunction).
then(function(c) { alert("success: " + c.name); }).
catch(function(err) { alert("error: " + err.message); });
Warto to przyjąć, ponieważ async
i await
rozszerza obietnice ulepszonej składni (i obsługi błędów):
try {
var p = await $.ajax("parent");
var x = await $.ajax("child/" + p.id);
var c = await someOtherDeferredFunction(x);
alert("success: " + c.name);
}
catch(err) {
alert("error: " + err.message);
}
success
, w jQuery 1.8 zostało zastąpione przez done
. Działają w ten sam sposób, ale done
są bardziej spójne z resztą jQuery.
.done
był wczesny (i teraz ślepy zaułek) jQuery pchnięcie na to, co się stało Promise
i teraz ma dość kompleksową obsługę języków. W nowych projektach używałbym const 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.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
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ępuje success
w jQuery 1.8.