Какая разница между успехом и методом .done() $.ajax
Может ли кто-нибудь мне помочь?
Я не могу понять разницу между success
и .done()
от $.ajax
.
Если возможно, приведите примеры.
Ответы
Ответ 1
Короче говоря, развязка функции обратного вызова успеха от функции ajax, поэтому позже вы можете добавить свои собственные обработчики, не изменяя исходный код (шаблон наблюдателя).
Более подробную информацию можно найти здесь: fooobar.com/questions/65486/...
Ответ 2
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
расширяют promises улучшенный синтаксис (и обработку ошибок):
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);
}
Ответ 3
.success()
вызывается только в том случае, если ваш веб-сервер отвечает 200-килобайтным HTTP-заголовком - в основном, когда все в порядке.
Обратные вызовы, прикрепленные к done(), будут запущены, когда отложен запрос. Обратные вызовы, подключенные к fail(), будут запущены, когда отклоненные отклоняются.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
Ответ 4
success
- это обратный вызов, который вызывается, когда запрос является успешным и является частью вызова $.ajax
. done
на самом деле является частью объекта jqXHR
, возвращаемого $.ajax()
, и заменяет success
в jQuery 1.8.