Javascript 所有AJAX异步请求是否已完成事件?

Javascript 所有AJAX异步请求是否已完成事件?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个嵌套的ajax请求。第一个请求返回一个包含设备的列表,对于每个设备,我执行另一个ajax请求以获取更多数据。当嵌套请求成功时,我将数据附加到中 我需要某种事件来告诉我所有请求何时完成。我该怎么做?请参阅下面的代码 $.ajax({ type: 'GET', url: '@Url.Content("~/Service/listAllDevices")', dataType: 'json', success: function (data) {

我有一个嵌套的ajax请求。第一个请求返回一个包含设备的列表,对于每个设备,我执行另一个ajax请求以获取更多数据。当嵌套请求成功时,我将数据附加到

我需要某种事件来告诉我所有请求何时完成。我该怎么做?请参阅下面的代码

$.ajax({
    type: 'GET',
    url: '@Url.Content("~/Service/listAllDevices")',
    dataType: 'json',
    success: function (data) {
        $.each(data.devices.device, function (index, value) {
            $.ajax({
                type: 'GET',
                url: '@Url.Content("~/Service/listLokationLabelsForDevice")' + '?uuid=' + value.uuid,
                dataType: 'json',
                success: function (data3) {
                    //Append to table
                }
            });
        });

您正在查找的事件是
ajaxStop

$(document).on('ajaxStop', function() {
    //do something
});
参考:

- http://api.jquery.com/ajaxstop/

您正在查找的事件是
ajaxStop

$(document).on('ajaxStop', function() {
    //do something
});
参考:

- http://api.jquery.com/ajaxstop/

您可以使用Promissions和
$。when()
查看所有ajax调用何时完成,如下所示:

$.ajax({
    type: 'GET',
    url: '@Url.Content("~/Service/listAllDevices")',
    dataType: 'json',
    success: function (data) {
        var promises = [];
        $.each(data.devices.device, function (index, value) {
            promises.push($.ajax({
                type: 'GET',
                url: '@Url.Content("~/Service/listLokationLabelsForDevice")' + '?uuid=' +
                    value.uuid,
                dataType: 'json',
            }));
        });
        $.when.apply($, promises).done(function() {
            // all ajax results are done here
            // results from each ajax call are in order in
            // arguments[0], arguments[1], ...
            // you can now append them all to the table
        });
    }
});
基本思想是将每个ajax调用返回的承诺收集到一个数组中。然后使用jQuery的
$。when
让jQuery告诉您所有这些承诺何时得到解决,并从中收集所有返回的结果,并按照您请求的顺序保存所有数据。然后,当调用来自
$的
.done()
回调时,
.when()调用时,所有数据都可用,您可以按顺序一次处理所有数据


注意,我还从内部ajax调用中删除了成功处理程序,因为您可以在
.done()
处理程序中处理所有结果。

您可以使用promises和
$。when()
查看您的所有ajax调用何时完成,如下所示:

$.ajax({
    type: 'GET',
    url: '@Url.Content("~/Service/listAllDevices")',
    dataType: 'json',
    success: function (data) {
        var promises = [];
        $.each(data.devices.device, function (index, value) {
            promises.push($.ajax({
                type: 'GET',
                url: '@Url.Content("~/Service/listLokationLabelsForDevice")' + '?uuid=' +
                    value.uuid,
                dataType: 'json',
            }));
        });
        $.when.apply($, promises).done(function() {
            // all ajax results are done here
            // results from each ajax call are in order in
            // arguments[0], arguments[1], ...
            // you can now append them all to the table
        });
    }
});
基本思想是将每个ajax调用返回的承诺收集到一个数组中。然后使用jQuery的
$。when
让jQuery告诉您所有这些承诺何时得到解决,并从中收集所有返回的结果,并按照您请求的顺序保存所有数据。然后,当调用来自
$的
.done()
回调时,
.when()调用时,所有数据都可用,您可以按顺序一次处理所有数据


注意,我还从内部ajax调用中删除了成功处理程序,因为您可以在
.done()中处理所有结果
handler.

为什么不对返回整个数据的服务器使用一个ajax调用?为什么不对返回整个数据的服务器使用一个ajax调用?这个回调将在您完成每个ajax后调用,因此它不是他想要的。他正在看“最后一次”ajax调用何时结束,但情况并非如此。在所有已注册的请求完成后调用它。全部---再次阅读文档。不要将其与“ajaxComplete”混淆!“每当Ajax请求完成时,jQuery都会检查是否有任何其他未完成的Ajax请求。“这很公平,但我仍然认为存在潜在的竞争风险”描述:注册一个处理程序,在所有Ajax请求完成后调用。这是一个Ajax事件。”我每天都参加这个活动,我知道这意味着什么。不幸的是,出于某种原因,您选择阅读文档。请看一下StackOverflow上的这个案例。顺便说一句,这只是一个意见,别紧张。我没有投反对票,如果你的回答是这样的,那么在你完成每一个ajax之后,这个回调将被调用,所以这不是他想要的。他正在看“最后一次”ajax调用何时结束,但情况并非如此。在所有已注册的请求完成后调用它。全部---再次阅读文档。不要将其与“ajaxComplete”混淆!“每当Ajax请求完成时,jQuery都会检查是否有任何其他未完成的Ajax请求。“这很公平,但我仍然认为存在潜在的竞争风险”描述:注册一个处理程序,在所有Ajax请求完成后调用。这是一个Ajax事件。”我每天都参加这个活动,我知道这意味着什么。不幸的是,出于某种原因,您选择阅读文档。请看一下StackOverflow上的这个案例。顺便说一句,这只是一个意见,别紧张。我没有投反对票,你的回答是这样吗