Ответ 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