我正在爲jQuery AJAX方法創建一個包裝器,因爲在實際進行之前,我的AJAX請求依賴於異步工作。推遲的jQuery AJAX包裝
什麼我目前做的是這樣的:http://pastie.org/private/bfdvep4kcdclzupsyddmiq
var ajax = function (options) {
var deferred = $.Deferred();
doAsyncWork()
.done(function (attributes) {
$.ajax(options)
.done(function() {
deferred.resolve.apply(this, arguments);
})
.fail(function() {
deferred.reject.apply(this, arguments);
});
})
.fail(function() {
deferred.reject();
});
return deferred.promise();
};
ajax().readyState // undefined
它有一個外部推遲返回的承諾。我實際執行AJAX請求之前,先啓動doAsyncWork()並等待它完成。現在,雖然這起作用,但問題是當其他腳本使用包裝器時,因爲它們無法訪問jQuery XHR對象的屬性。
有沒有辦法解決這個優雅?
傳遞'function(){deferred.resolve.apply(this,arguments);}'就像傳遞'deferred.resolve'一樣,但後者不需要額外的閉包。 – Alnitak