3个方法完成后的jQuery回调?

时间:2013-09-23 11:04:09

标签: jquery

我有3个JS函数:

func1 ()
{
    $.ajax(...,callback1)
}


func2 ()
{
    $.ajax(...,callback2)
}


func3 ()
{
    $.ajax(...,callback3)
}

它们的执行方式如下:

func1();
func2();
func3();

问题如何在所有3个mySummaryCallback()之后执行done

NB

我可以使用一个闭包回调函数来增加一个值然后执行。但是我无法触及ajax回调函数。 (https://stackoverflow.com/a/2911891/859154

5 个答案:

答案 0 :(得分:3)

使用$.when()为所有需要将promise对象返回给调用者的方法执行此操作

func1() {
    return $.ajax(..., callback1)
}


func2() {
    return $.ajax(..., callback2)
}


func3() {
    return $.ajax(..., callback3)
}

$.when(func1(), func2(), func3()).done(function () {
    //all are success
}).fail(function(){
    //atleast one failed
}).always(function(){
    //all are completed
})

答案 1 :(得分:2)

从函数中返回每个ajax请求公开的promise接口,并使用$.when() jquery方法:

func1 ()
{
    return $.ajax(...,callback1)
}


func2 ()
{
    return $.ajax(...,callback2)
}


func3 ()
{
    return $.ajax(...,callback3)
}

$.when(func1(),func2(),func3()).done(/*callback*/);

答案 2 :(得分:0)

如果您无法直接编辑callbackN函数,请创建一个包装器,例如:

func2 ()
{
    $.ajax(..., function() {
        //call your callback here
        callback2();

        //increase your counter here once it's done ...
    });
}

这就是你想要的吗?

答案 3 :(得分:0)

我认为您可以在这种情况下使用jQuery Deferred

答案 4 :(得分:0)

一种方法是同步所有Ajax调用,然后你需要调用你的BigCallback

否则你需要检查最后一个Ajax的状态(0-用于发起请求,到4)然后你可以继续。