我正在为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