javascript - 在整个表上一一运行 Ajax 请求

标签 javascript jquery ajax

我有一个包含近 300 多行的表。在页面加载时,我需要调用ajax请求来通过数据库中的row_id更新每行的status。当成功时,将响应附加到相应行的列中。之后为下一行运行 ajax,依此类推。

我的尝试

$('table tbody tr').each(function(){
   var tracking = $(this).attr('id');
  setInterval(function(){
   $.ajax({
      ...
      success: function(){ 
         //append here 
      }
   });
  }, 1000);

问题

这样,当页面加载时,它会创建几乎所有行的请求,如果记录太多,页面就会卡住。

有没有简单的方法可以在每一行上逐一执行ajax?

最佳答案

好的,我很乐意提供一个实用的方法来做到这一点。

首先,按照问题中的方式进行操作肯定会导致浏览器停止运行,因为您将同时执行多个异步请求。如果发生这种情况,大多数浏览器都会发出警告。

现在,另一种方法是将下一个 ajax 调用包含在您的 complete() 回调中,并在数组中维护您在每个请求上发送的数据。我使用递归函数来实现此目的

var tracker = [];

$('table tbody tr').each(function(){
    tracker.push($(this).attr('id'));
});

makeRequest(tracker);

function makeRequest(tracker) {
    $.ajax({
        // ajax settings
        data: {'id': tracker.pop()},
        success: function() {
            // use returned result here
        },
        complete: function() {
            if(tracker.length) {
                makeRequest(tracker);
            }
            else return;
        }
    });
}

拜托,这只是实验性的。任何有建议或修改的人都可以提出。

关于javascript - 在整个表上一一运行 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57554076/

相关文章:

javascript - 用js闭包替换js命名空间的全局变量

javascript - 我无法使 "commands"在 chrome 扩展中工作

jquery - 如何从最后一个列表项中删除边框并选择 :nth-child (multiple items)

c# - 删除 1st Index 元素会导致表单不发布其他大于 1st 的索引

javascript - 滚动负责的背景图像覆盖尺寸 : is it possible?

javascript - Rails AJAX 部分无需提交表单

javascript - 如何使在 javascript 中发出的 AJAX 请求在调试器中故意失败以对其进行测试?

javascript - Rails 3.1 Ajax 部分中的 Google Charts

javascript - 如何在未知数量的参数上柯里化(Currying)一个函数

ajax - 如何将 Ajax 与 Symfony2 集成