串行或并行调用多个ajax请求

时间:2017-01-23 16:49:20

标签: javascript jquery ajax

我有3个功能。

load_graphs('national','','container-natl-rates','container-natl-counts')
load_graphs('division','Western','container-west-rates','container-west-counts')
load_graphs('division','Eatern','container-east-rates','container-east-counts')

load_graphs是一个执行ajax调用并创建图形的函数。

目前,此调用是异步完成的,但我希望在完成每个单独的调用后执行回调。

3 个答案:

答案 0 :(得分:0)

一种选择是使用如下的回调:

function load_graphs(arg1, arg2, arg3, arg4, done) {
    // then do stuff and when that stuff is done
    // call your callback (in this case I named it "done")
    done();
}

然后在你的方法调用中

load_graphs('national','','container-natl-rates','container-natl-counts', function() {
    // first load_graphs() is complete
    load_graphs('division','Western','container-west-rates','container-west-counts', function() {
        // second load_graphs() is complete
        load_graphs('division','Eatern','container-east-rates','container-east-counts', function() {
            // third load_graphs() is complete
        })
    })
})

还有其他更高级的选项,例如使用第三方工具,例如asyncco

希望这有帮助

答案 1 :(得分:0)

如果您无法更改load_graphs并插入回拨电话,则必须使用其他一些指示load_graphs完成时间的侦听器。

例如,您说该函数绘制了一个图形,因此您可以跟踪一些影响。也许<div>更改其宽度,也许全局变量设置为当前时间戳值。你应该抓住一些东西,它实际上取决于你没有提供的其余代码。

在第一次load_graphs来电之后,设置setInterval以持续检查此类指标,然后依次运行下一个load_graphs来电。

答案 2 :(得分:0)

考虑使用promises。

使用promise是处理此类事情的好方法,其中下一个任务需要前一个任务的值(或者至少先完成上一个任务)。

https://scotch.io/tutorials/javascript-promises-for-dummies