我有一个内部进行 ajax 调用并具有成功和失败回调方法的函数。
function dothis() {
object.getMyData(x,y,successCallback,failureCallback);
}
该函数立即返回,因为 getMyData 是异步的。现在我希望函数 dothis 等到 successCallback 或 failureCallback 被执行。如何使用 deferred 来做到这一点?
我有一个内部进行 ajax 调用并具有成功和失败回调方法的函数。
function dothis() {
object.getMyData(x,y,successCallback,failureCallback);
}
该函数立即返回,因为 getMyData 是异步的。现在我希望函数 dothis 等到 successCallback 或 failureCallback 被执行。如何使用 deferred 来做到这一点?
ajax
已经返回一个 deferred,所以你可以使用它。可以更改getMyData
返回的延迟ajax
返回吗?
function getMyData() {
return ajax({
// ajax params
});
}
function dothis() {
// return deferred which comes from ajax
return object.getMyData(x,y,successCallback,failureCallback);
}
dothis().done(function(){
// do something on success
}).fail(function(){
// do something on failure
});
如果您无法更改getMyData
以返回延迟,您可以这样做:
function dothis() {
var dfd = $.Deferred();
object.getMyData(x,y,function(){
dfd.resolve(); // success
},function(){
dfd.reject(); // fail
});
return dfd.promise();
}
dothis().done(function(){
// do something on success
}).fail(function(){
// do something on failure
});
看起来您不需要异步调用。
您是否尝试进行同步调用然后执行成功/失败功能?请说清楚。
谢谢,
@leo
同步调用示例>
$.ajax({
type: "GET",
url: remote_url,
async: false,
success : function(data) {
remote = data;
}
});