jQuery Отложенное vs jqXHR

17

Я использую:

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

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

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

    
задан Phillip Senn 08.06.2011 в 23:17
источник

2 ответа

17

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

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

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

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

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

    
ответ дан Alnitak 08.06.2011 в 23:22
источник
9

Отложенное предназначено для замены 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;

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

    
ответ дан gradbot 22.06.2011 в 23:13
источник
  • Отличное слайд-шоу и новые концепции. Каков самый простой способ реализовать обещания / отложенные, если у вас нет jQuery? –  huyz 29.08.2011 в 06:19
  • Простая версия github.com/kriszyp/node-promise Другая реализация, которая обертывает запрос XHR. blogs.msdn.com/b/rbuckton/archive/2011/08/15/... –  gradbot 29.08.2011 в 12:21
  • Ничего себе! Это отличное слайд-шоу! Спасибо gradbot. –  Phillip Senn 09.11.2011 в 00:48
  • У вас есть опечатка несколько раз, когда вы ошибочно написали функцию слова. –  Phillip Senn 08.02.2012 в 16:53
  • @cf_PhillipSenn исправлено, спасибо! –  gradbot 08.02.2012 в 17:50