Подтвердить что ты не робот

JQuery Отложенные против jqXHR

Я использую:

var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});

Но версия 1.5 добавила отложенный объект.

Q: В общем, когда вы используете успех, ошибки и полные методы в сравнении с новой жаркой отложенных, затем выполняются и терпят неудачу?

4b9b3361

Ответ 1

Для $.ajax() и family .success является просто синонимом Deferred .done, а также .error является синонимом .fail.

Итак, на самом деле примеры, которые вы показываете, уже отложены методами, но с разными именами.

.complete в основном является синонимом нового jQuery 1.6 .always, и вы можете получить тот же эффект, используя $.then(cb, cb), что приведет к вызову cb, будет ли вызов AJAX успешным или нет. Я считаю, что существуют незначительные различия в том, какие параметры передаются на "отказоустойчивые" обратные вызовы между вариантами .complete, .always и $.then.

Я лично предпочитаю использовать отложенную версию этих названных функций, потому что тогда вам не нужно беспокоиться о том, являются ли ваши отложенные объекты jqXHR или нет. Только jqXHRs имеют .success, .error и .complete, но каждый Deferred (включая jqXHR) имеет .done, .fail и .always.

EDIT кажется, что разработчики jQuery согласны со мной - они объявили, что .success, .error и .complete будут устаревать в jQuery 1.8

Ответ 2

Отложенное предназначено для замены jqXHR и абстрагирует идею успеха и ошибки за пределами ajax.

Быстрый просмотр исходного кода: jQuery 1.6.1

// completeDeferred is resolved in only one place.
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );

deferred.promise( jqXHR ); // this attaches the promise methods to jqXHR
jqXHR.success = jqXHR.done;
jqXHR.error = jqXHR.fail;
jqXHR.complete = completeDeferred.done;

Я сделал сыр слайд-шоу для работы над тем, как отсрочено полезно.