有没有办法同步ajax调用

时间:2013-10-30 11:33:28

标签: javascript jquery ajax html5

这可能是一个微不足道的问题,但我想知道是否有办法以某种方式知道最后的ajax调用何时完成。所以假设我有3个异步ajax调用

$.ajax({
    type: "GET",
    datatype: "json",
    url: <my service url 1>
})
.done(function() {
    // handler
});

$.ajax({
    type: "GET",
    datatype: "json",
    url: <my service url 2>
})
.done(function() {
    // handler
});

$.ajax({
    type: "GET",
    datatype: "json",
    url: <my service url 3>
})
.done(function() {
    // handler
});

我想在第一个呼叫开始时显示进度条,并在最后一个呼叫结束时隐藏它。问题是即使我按顺序调用它们,因为调用是异步的,我不知道如何判断所有调用何时完成。我可以将它们嵌套在另一个内部,但据我所知,它需要更长的时间,因为必须等待另一个完成。有没有办法以某种方式同步它?

2 个答案:

答案 0 :(得分:2)

我曾经有过相同的需求。如果您可以使用jQuery,请查看:http://lostechies.com/joshuaflanagan/2011/10/20/coordinating-multiple-ajax-requests-with-jquery-when/

否则,您可以通过AJAX调用传递一个简单的回调函数,该函数在每次异步处理结束时返回进度指示器更新。

答案 1 :(得分:2)

已经回答,但考虑使用全球事件 -

AjaxStart - 当任何ajax呼叫开始时触发 AjaxStop - 在所有ajax调用完成时触发

示例 -

$( document ).ajaxStart(function() {
  $( "#progressBar" ).show();
});

$( document ).ajaxStop(function() {
  $( "#progressBar" ).hide();
});

但是你需要确保在第一个呼叫完成之前第二个呼叫开始,或者至少应该在第一个呼叫完成后立即触发。