#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.