Javascript 在整个表上逐个运行Ajax请求

Javascript 在整个表上逐个运行Ajax请求,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一张几乎有300多行的桌子。在页面加载时,我需要调用ajax请求,通过数据库中的行id更新每行的状态。当Success将响应追加到相应行的列中时。之后,为下一行运行ajax,以此类推 我的尝试 $('table tbody tr').each(function(){ var tracking = $(this).attr('id'); setInterval(function(){ $.ajax({ ... success: function(){

我有一张几乎有300多行的桌子。在页面加载时,我需要调用ajax请求,通过数据库中的
行id
更新每行的
状态。当
Success
将响应追加到相应行的列中时。之后,为下一行运行ajax,以此类推

我的尝试

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

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


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

向服务器发出数百个更新状态的请求不是一个好主意。您的服务器将过载,客户端必须等待作业太长时间

也许您可以尝试创建一个新的API,将您想要跟踪的ID数组发送到服务器,服务器将处理这些ID以检查这些ID的状态。

“有两种方法,一种是将Jquery数据表与服务器端脚本一起使用,这样它将自动为您创建分页;另一种是使用您自己的脚本,并在其中添加一个逻辑,请参见下面的场景,这只是一个示例。”

“关于你的问题

$lines=$_POST['lines']; 或者按照您的post方法,如果您使用的是MVC,那么一定要使用类方法

在查询中添加如下$lines变量

mysqli_查询($con,“从表中选择*限制$行,10”); //这里您将使用$line,其中10是每个间隔上要显示的记录数


…希望它能帮助你。”

好的,我很乐意给出一个实用的方法

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

现在,另一种方法是在
complete()
回调中包含下一个ajax调用,并在数组中维护每个请求发送的数据

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;
        }
    });
}
拜托,这只是实验性的。任何有建议或修改的人都可以做

在ajax请求中使用async:false

$.ajax({
//ajax设置
数据:{'id':tracker.pop()},
async:false,
成功:函数(){
//在这里使用返回的结果
},
完成:函数(){
if(跟踪器长度){
makeRequest(跟踪器);
}
否则返回;
}

});

也许你可以试试jquery.queue()
有没有简单的方法可以在每一行上逐个执行ajax?
,是的,在循环中执行,但请注意这是一个非常糟糕的主意。在您的示例中,您将向服务器发出300个请求并将其淹没,从而有效地让您的用户接受DDOS攻击。检索一行中所有行所需的信息将是一个更好的主意单个请求。由于您使用的是ajax,
setInterval
非常简单/不必要。为什么不收集JSON数组中的所有id,然后使用该数组发送单个请求,并获取另一个JSON数组及其所有状态响应?
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;
        }
    });
}