Kann mir jemand helfen?
Ich kann den Unterschied zwischen success
und .done()
von nicht verstehen $.ajax
.
Wenn möglich, geben Sie bitte Beispiele.
Kann mir jemand helfen?
Ich kann den Unterschied zwischen success
und .done()
von nicht verstehen $.ajax
.
Wenn möglich, geben Sie bitte Beispiele.
Antworten:
Kurz gesagt, Entkoppeln der erfolgreichen Rückruffunktion von der Ajax-Funktion, damit Sie später Ihre eigenen Handler hinzufügen können, ohne den ursprünglichen Code (Beobachtermuster) zu ändern.
Weitere Informationen finden Sie hier: https://stackoverflow.com/a/14754681/1049184
success:
Verwendung als Parameter und .success()
als Methode für a jqXHR
. Letzteres wird abgelehnt, aber Ersteres ist das, wonach das OP gefragt hat.
success
Wird nur ausgelöst, wenn der AJAX-Aufruf erfolgreich ist, dh letztendlich einen HTTP 200-Status zurückgibt. error
Wird ausgelöst, wenn dies fehlschlägt und complete
wenn die Anforderung beendet ist, unabhängig vom Erfolg.
In jQuery 1.8 wurde das jqXHR
Objekt (zurückgegeben von $.ajax
) success
durch done
, error
mit fail
und complete
mit ersetzt always
.
Sie sollten jedoch weiterhin in der Lage sein, die AJAX-Anforderung mit der alten Syntax zu initialisieren. Diese machen also ähnliche Dinge:
// 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"); });
Diese Änderung dient der Kompatibilität mit dem zurückgestellten Objekt von jQuery 1.5 . Mit Deferred (und jetzt Promise
mit vollständiger Unterstützung für native Browser in Chrome und FX) können Sie asynchrone Aktionen verketten:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
Diese Funktionskette ist einfacher zu pflegen als eine verschachtelte Pyramide von Rückrufen, mit denen Sie arbeiten success
.
Beachten Sie jedoch, dass dies done
jetzt zugunsten der stattdessen Promise
verwendeten Syntax veraltet ist then
:
$.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); });
Dies ist eine Übernahme wert, da async
und await
erweitert eine verbesserte Syntax (und Fehlerbehandlung) verspricht:
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
, in jQuery 1.8 wurde das durch ersetzt done
. Sie funktionieren auf die gleiche Weise, sind jedoch done
konsistenter mit dem Rest von jQuery.
.done
war jQuerys früher (und jetzt Sackgasse) Stich in das, was wurde Promise
und das hat jetzt eine ziemlich umfassende Sprachunterstützung. In neuen Projekten würde ich const response = await fetch(...)
stattdessen verwenden.
.success()
wird nur aufgerufen, wenn Ihr Webserver mit einem HTTP-Header mit 200 OK antwortet - im Grunde genommen, wenn alles in Ordnung ist.
Die an done () angehängten Rückrufe werden ausgelöst, wenn der Aufschub behoben ist. Die an fail () angehängten Rückrufe werden ausgelöst, wenn die Zurückstellung abgelehnt wird.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
success
ist der Rückruf, der aufgerufen wird, wenn die Anforderung erfolgreich ist und Teil des $.ajax
Aufrufs ist. done
ist tatsächlich Teil des von zurückgegebenen jqXHR
Objekts $.ajax()
und wird success
in jQuery 1.8 ersetzt.