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

#jquery #jquery-deferred

#jquery #отложенный jquery

Вопрос:

Я использую:

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

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

Вопрос: В целом, когда вы используете методы success, error и complete по сравнению чем новизна отложенного затем выполняется и завершается неудачей?

Ответ №1:

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

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

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

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

РЕДАКТИРОВАТЬ похоже, разработчики 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;
  

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

Комментарии:

1. Отличное слайд-шоу и новые концепции. Какой самый простой способ реализовать promises / deferred, если у вас нет jQuery?

2. Простая версия github.com/kriszyp/node-promise Еще одна реализация, которая обертывает запрос XHR. blogs.msdn.com/b/rbuckton/archive/2011/08/15 /…

3. У вас несколько раз была опечатка, когда вы неправильно написали слово function.