Может кто-нибудь помочь мне?
Я не в состоянии понять разницу между success
и .done()
из $.ajax
.
Если можно, приведите примеры.
Может кто-нибудь помочь мне?
Я не в состоянии понять разницу между success
и .done()
из $.ajax
.
Если можно, приведите примеры.
Ответы:
Короче говоря, отделение функции обратного вызова успеха от функции ajax, чтобы позже вы могли добавлять свои собственные обработчики, не изменяя исходный код (шаблон наблюдателя).
Более подробную информацию можно найти здесь: https://stackoverflow.com/a/14754681/1049184
success:
использованием в качестве параметра и .success()
метода в файле jqXHR
. Последний устарел, но первый - это то, о чем спрашивал OP.
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()
вызывается только в том случае, если ваш веб-сервер отвечает HTTP-заголовком 200 OK - в основном, когда все в порядке.
Обратные вызовы, прикрепленные к 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.