Javascript 所有AJAX异步请求是否已完成事件?
我有一个嵌套的ajax请求。第一个请求返回一个包含设备的列表,对于每个设备,我执行另一个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({
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上的这个案例。顺便说一句,这只是一个意见,别紧张。我没有投反对票,你的回答是这样吗