等待完成多个可以并发运行的ajax调用

时间:2014-05-27 08:26:27

标签: javascript ajax asynchronous

我有三个可以同时运行的ajax调用。但是我希望浏览器等到所有ajax调用完成。一种方法是为每个人设置async为false,但之后我会失去宝贵的时间,因为它们可以同时运行。有没有办法同时运行它们但是让浏览器挂起直到所有完成?

4 个答案:

答案 0 :(得分:1)

成功后,调用回调函数:

$.ajax({
    success: function(){ checkAjax(); }
});

在回调函数中计算你有多少回应。

var totalEnded = 0, totalAjax = 3;
function checkAjax() {
   totalEnded++;

   if (totalEnded == totalAjax) {
       /* Do important stuff here, or call another function */
   }
}

答案 1 :(得分:0)

如果你正在使用jQuery然后查看$.when,你可以提供一个成功回调,当所有请求都加载完成后执行回调。

答案 2 :(得分:0)

为了更轻松地使用异步内容,您可以使用promises pattern。如果您使用的是jQuery,则可以使用jQuery.when()。来自文档:

$.when( $.ajax( "/p1.php" ), $.ajax( "/p2.php" )).done(function( a1, a2 ) {
     //do this when both ajax calls are done
});

答案 3 :(得分:0)

您可以使用延迟对象执行此操作,因为ajax本身会返回该对象。请参阅Pass in an array of Deferreds to $.when()

var deferreds = [
    $.post(),
    $.get(),
];
$.when.apply($, deferreds).done(function() {
    // All ajax requests was done
});