Хтось може мені допомогти?
Я не в змозі зрозуміти різницю між successі .done()з $.ajax.
Якщо можливо, наведіть приклади.
Хтось може мені допомогти?
Я не в змозі зрозуміти різницю між successі .done()з $.ajax.
Якщо можливо, наведіть приклади.
Відповіді:
Коротше кажучи, від'єднати функцію зворотного виклику успіху від функції ajax, тому пізніше ви можете додавати власні обробники без зміни оригінального коду (модель спостерігача).
Детальну інформацію можна знайти тут: https://stackoverflow.com/a/14754681/1049184
success: використовуваним як параметром і .success()як методом на a jqXHR. Останнє застаріло, але перше - про що просив ОП.
successзапускається лише у випадку успішного дзвінка AJAX, тобто в кінцевому рахунку повертає стан HTTP 200. errorспрацьовує, якщо він не працює і completeколи запит закінчується, незалежно від успіху.
У jQuery 1.8 jqXHRоб’єкт (повернений $.ajax) successбув замінений на done, errorз failі completeна always.
Однак ви все одно зможете ініціалізувати запит AJAX зі старим синтаксисом. Отже, це роблять подібні речі:
// 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"); });
Ця зміна призначена для сумісності з відкладеним об'єктом jQuery 1.5 . Відкладені (і тепер Promise, які мають повну підтримку нативного браузера в Chrome і FX) дозволяють ланцюг асинхронних дій:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
Цей ланцюжок функцій легше підтримувати, ніж вкладена піраміда зворотних викликів success.
Однак зауважте, що doneтепер застаріле на користь Promiseсинтаксису, який використовується 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); });
Це варто приймає тому asyncі awaitрозширити обіцяє поліпшений синтаксис (і обробку помилок):
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, в jQuery 1.8 це було замінено на done. Вони працюють аналогічно, але doneбільше відповідають решті jQuery.
.doneБув ранній (і тепер тупиковий) jQuery, коли він став, Promiseі що тепер має достатньо всебічну підтримку мови. У нових проектах я б використовував const response = await fetch(...)замість цього.
.success() дзвонить, лише якщо ваш веб-сервер відповість заголовком 200 OK HTTP - в основному, коли все добре.
Відкликані дзвінки, приєднані до done (), будуть зняті, коли відстрочка буде вирішена. Відкликані дзвінки, приєднані до fail (), будуть зняті, коли відкладене відхилено.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
successце зворотний виклик, який викликається, коли запит успішний і є частиною $.ajaxвиклику. doneнасправді частина jqXHRоб'єкта, повернута $.ajax()і замінюється successв jQuery 1.8.