Czy ktoś może mi pomóc?
Nie jestem w stanie zrozumieć różnicy między successi .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 successi .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.
successuruchamia się tylko wtedy, gdy wywołanie AJAX powiedzie się, tj. ostatecznie zwraca stan HTTP 200. erroruruchamia się, jeśli się nie powiedzie i completepo zakończeniu żądania, niezależnie od powodzenia.
JQuery 1,8 na jqXHRprzedmiot (zwracany przez $.ajax) successzostał zastąpiony przez done, errorw faili completez 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 donejest to obecnie przestarzałe na rzecz Promiseskładni, która thenzamiast 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ż asynci awaitrozszerza 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 donesą bardziej spójne z resztą jQuery.
.donebył wczesny (i teraz ślepy zaułek) jQuery pchnięcie na to, co się stało Promisei 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
successto wywołanie zwrotne, które jest wywoływane, gdy żądanie się powiedzie i jest częścią $.ajaxpołączenia. donejest faktycznie częścią jqXHRobiektu zwróconego przez $.ajax()i zastępuje successw jQuery 1.8.