Kann mir jemand helfen?
Ich kann den Unterschied zwischen successund .done()von nicht verstehen $.ajax.
Wenn möglich, geben Sie bitte Beispiele.
Kann mir jemand helfen?
Ich kann den Unterschied zwischen successund .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.
successWird nur ausgelöst, wenn der AJAX-Aufruf erfolgreich ist, dh letztendlich einen HTTP 200-Status zurückgibt. errorWird ausgelöst, wenn dies fehlschlägt und completewenn die Anforderung beendet ist, unabhängig vom Erfolg.
In jQuery 1.8 wurde das jqXHRObjekt (zurückgegeben von $.ajax) successdurch done, errormit failund completemit 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 Promisemit 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 donejetzt zugunsten der stattdessen Promiseverwendeten 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 asyncund awaiterweitert 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 donekonsistenter mit dem Rest von jQuery.
.donewar jQuerys früher (und jetzt Sackgasse) Stich in das, was wurde Promiseund 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
successist der Rückruf, der aufgerufen wird, wenn die Anforderung erfolgreich ist und Teil des $.ajaxAufrufs ist. doneist tatsächlich Teil des von zurückgegebenen jqXHRObjekts $.ajax()und wird successin jQuery 1.8 ersetzt.