Die Fragen :
- Sollten wir unsere Codierung wie unten vorgeschlagen ändern?
- Gibt es einen Unterschied zwischen
.done()
&success:
,.fail()
&error:
und.always()
&complete:
?
Die Präambel :
Ich habe einen jQuery.ajax-Aufruf zusammengestellt, den ich auch in der Vergangenheit erfolgreich durchgeführt habe. Etwas wie das:
$.ajax(
{
url: someUrl,
type: 'POST',
data: someData,
datatype: 'json',
success: function (data) { someSuccessFunction(data); },
error: function (jqXHR, textStatus, errorThrown) { someErrorFunction(); }
});
Bei einem kurzen Blick auf einige Dokumentationen stieß ich auf eine Referenz, die besagte, dass Erfolg, Fehler und vollständige Rückrufe ab jQuery 1.8 veraltet sind. Verwenden Sie stattdessen jqXHR.done (), jqXHR.fail () und jqXHR.always (), um Ihren Code für das eventuelle Entfernen vorzubereiten.
Wir sollten daher stattdessen so etwas programmieren:
$.ajax( "example.php" )
.done(function (data) { someSuccessFunction(data); })
.fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); })
.always(function() { alert("complete"); });
javascript
ajax
jquery
PostureOfLearning
quelle
quelle
.done()
ersetzt.success()
,.fail()
ersetzt.error()
und.always()
ersetzt.complete()
. Die.success()
,.error()
und.complete()
Methoden unterscheiden sich von densuccess
,error
undcomplete
Optionen für das.ajax()
Verfahren.Antworten:
Nun, es gibt keinen Vorteil, dies in dieser speziellen Situation zu tun.
Der Punkt der
.done()
.fail()
.always()
Methoden ist, dass Sie können$.ajax
Wenn Sie an der
$.ajax
Anrufstelle nur einzelne Handler anschließen, kommen diese Vorteile nicht wirklich ins Spiel.So können Sie das Versprechen zurückgeben und andere können ihre eigenen Handler anhängen.
Beispiel ist das Aktualisieren von Plugins nach einer Ajax-Anfrage:
$.ajaxPrefilter(function(opt, origOpt, jqxhr) { jqxhr.always(function() { $("[data-plugin]").plugin(); }); });
quelle
complete
,error
undsuccess
Einstellungen werden eine Reihe von Callback - Funktionen übernehmen, so dass Sie mehrere Handler anhängen können.$.ajax()
? Funktionieren diese Methoden nur auf jqxhr-Empfängern?