Может кто-нибудь помочь мне?
Я не в состоянии понять разницу между 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.