4

这可能是一个微不足道的问题,但我想知道是否有办法以某种方式知道最后一次 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
});

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

4

2 回答 2

3

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

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

于 2013-10-30T11:38:23.757 回答
2

已回答,但请考虑改用全局事件 -

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

示例 -

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

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

但是您需要确保第二次调用在第一次调用完成之前开始,或者至少应该在第一次调用完成后立即触发。

于 2014-08-12T13:16:30.170 回答