javascript - JQuery Ajax 控制流程

标签 javascript jquery ajax

我正在使用 JQuery 执行 ajax 调用来获取数据。我正在进行多次调用以增量方式获取这些数据。所以我有类似的东西:

for(i=0;i<numOfDataObjects;i++) {
  $.ajax({
     //get the data and do something with it in the success callback
  });
}

在此循环之后我有一些代码,我希望仅在所有 ajax 调用完成且成功回调退出后执行。现在这还没有发生,我猜是因为 xhr 对象的异步特性。

有没有一种方法,无需在每个ajax成功函数中增加全局计数器(并检查它是否等于某个值),即可确保在所有服务器调用完成后执行循环后的代码?

最佳答案

您可以使用jQuery Message Queueing插入。将需要处理的所有项目放入队列中。请注意文档中的 complete 函数:

complete: (Function) Called whenever there are no longer any queue items to process. After completion, if more queue items are added and the queue completes again, this function will be called again. Inside this function, this refers to the queueObj object.

将您想要运行的代码放入该处理程序中。

不过有一点需要注意。我无法从文档中判断是否在为每个 AJAX 请求执行回调后调用 complete 处理程序,或者是否在队列中没有剩余项目需要处理时立即调用它(无论当前是否有正在执行的 AJAX 请求)。

更新

我似乎忽略了回调函数:

callback: (Function) Called for each queue item or batch of items, every delay milliseconds. This function is passed a single argument, which is the single queue item if batch is 1, or an array of queue items if batch is > 1. If callback returns true, the queue item(s) will be re- added back onto the front of the queue for the next callback execution to retry. Inside this function, this refers to the queueObj object.

我想您可以将需要发送的所有内容放入批处理中,并将需要运行的代码放入 callback 处理程序中。

关于javascript - JQuery Ajax 控制流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579450/

相关文章:

javascript - Microsoft Edge 阻止发送到同一专用网络 CIDR 中的 IP 的跨域请求

javascript - 迭代嵌套关联数组

javascript - Chrome 消息传递,我做错了什么?

javascript - 如何在 JavaScript 中创建模常量

javascript - 如果选中里面的复选框,则更改 div 背景颜色

php - 与 Apache/PHP/Javascript 的长期连接(异步服务器推送)?

javascript - jquery background-position-x 问题

javascript - 如何在点击父div jquery时显示下一个div

javascript - 使用 jQuery 获取 iframe 的 HTML 内容

java - 验证错误: Value is required error for list selection event