Какая разница между успехом и методом .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.