【发布时间】:2011-07-13 14:20:16
【问题描述】:
我已经设置了一些代码,我想要一个非常简单的 API 来处理 ajax 请求。
所以,我想做的只是以某种方式使用 deferred 来返回成功。
var factory = function(dataParams) {
return $.ajax({
type : "POST",
dataType : "json",
url : "http://example.com/whatever",
data : dataParams,
beforeSend : function(jqXHR, settings){/*... something here ...*/},
error : function(jqXHR, textStatus, errorThrown){/*... something here ...*/},
complete : function(jqXHR, textStatus) {/*... something here ...*/}
});
会被诸如
之类的东西调用var dataTools = {
"foo" : function(){
factory({"One": 1}).success(function(jqXHR){
//Do something to jqXHR
//Return something to the "upper most" calling... how?
})
}
"bar" : function(){
factory({"Two": 2}).success(function(jqXHR){
//Return jqXHR to the "upper most" calling... how?
})
}
};
这样我就可以这样使用它了:
$.each(dataTools.foo(), function(k,v){
console.log(v);
});
基本上,对象dataTools.foo 会从成功返回一个值,或者应该在失败或跳过该代码分支的情况下返回一个空集。
我尝试使用 $.when().then(),但我似乎无法弄清楚如何将其融入我在这里描述的内容中。
【问题讨论】:
-
您的意思是写
var dataTools = {吗? -
你“推迟”成功函数的目的是什么?您是否正在尝试构建可重用的请求对象?
-
@Derek Adair,是的。我想用它来获取一些数据,并在完成后返回所有内容,而不是使用回调。
标签: jquery ajax asynchronous jquery-deferred