Хтось може мені допомогти?
Я не в змозі зрозуміти різницю між 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.