var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});
但是1.5版本中加入了延期對象。問:一般來說,你什麼時候使用成功,錯誤和完整的方法,而不是延遲的新熱度,完成和失敗?
var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});
但是1.5版本中加入了延期對象。問:一般來說,你什麼時候使用成功,錯誤和完整的方法,而不是延遲的新熱度,完成和失敗?
對於$.ajax()
和家庭.success
僅僅是延遲的.done
的代名詞,同樣.error
是.fail
的代名詞。
所以實際上你展示的例子是已經延期的方法,但名稱不同。
.complete
是大多新的jQuery 1.6 .always
的代名詞,你可以得到使用$.then(cb, cb)
同樣的效果,這將導致cb
要調用的AJAX調用成功與否。我相信在將參數傳遞給.complete
,.always
和$.then
變體之間的「失敗」回調函數時存在細微差異。
我個人更喜歡使用這些命名函數的Deferred版本,因爲那樣你就不用擔心延期的對象是否是jqXHRs。只有jqXHRs
有.success
,.error
,並且.complete
,但每遞延(包括jqXHRs)具有.done
,.fail
和.always
。
編輯似乎jQuery的開發者同意我的看法 - 他們已經announced是.success
,.error
和.complete
將在jQuery的1.8
被棄用推遲是爲了取代jqXHR並提取成功和錯誤的想法超越阿賈克斯。
快速查看源代碼: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;
我做了一個奶酪slide show工作有關如何延期是非常有用的。
偉大的幻燈片放映和新的概念。如果您沒有jQuery,實現承諾/延期的最簡單方法是什麼? – huyz 2011-08-29 04:19:06
簡單版本https://github.com/kriszyp/node-promise另一個包裝XHR請求的實現。 http://blogs.msdn.com/b/rbuckton/archive/2011/08/15/promise-js-2-0-promise-framework-for-javascript.aspx – gradbot 2011-08-29 10:21:47
哇!這是一個偉大的幻燈片!感謝gradbot。 – 2011-11-08 23:48:56