0

我有一个内部进行 ajax 调用并具有成功和失败回调方法的函数。

function dothis() {
    object.getMyData(x,y,successCallback,failureCallback);
}

该函数立即返回,因为 getMyData 是异步的。现在我希望函数 dothis 等到 successCallback 或 failureCallback 被执行。如何使用 deferred 来做到这一点?

4

3 回答 3

1

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
});
于 2013-03-07T05:43:41.050 回答
0

看起来您不需要异步调用。

您是否尝试进行同步调用然后执行成功/失败功能?请说清楚。

谢谢,

@leo

同步调用示例>

$.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });
于 2013-03-06T04:30:55.260 回答
0

我更喜欢你使用 jquery deferred 的 $.when 和 $.then 组合。

你可以访问这个

您也可以在stackoverflow中找到相关答案。

于 2013-03-06T04:37:20.687 回答