Может ли кто-нибудь мне помочь?
Я не могу понять разницу между success
и .done()
от $.ajax
.
Если возможно, приведите примеры.
Может ли кто-нибудь мне помочь?
Я не могу понять разницу между success
и .done()
от $.ajax
.
Если возможно, приведите примеры.
Короче говоря, развязка функции обратного вызова успеха от функции ajax, поэтому позже вы можете добавить свои собственные обработчики, не изменяя исходный код (шаблон наблюдателя).
Более подробную информацию можно найти здесь: fooobar.com/questions/65486/...
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);
}
.success()
вызывается только в том случае, если ваш веб-сервер отвечает 200-килобайтным 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.