如何对jQueryAjax请求排队?

如何对jQueryAjax请求排队?,jquery,Jquery,我已经做了很多搜索,我不认为我能找到我要找的 我有一个类似于twitter的系统,你只需点击一个按钮就可以添加(或在twitter中跟踪)多个人 例如,每次我单击下面的“添加”按钮时,它都会发出一个AJAX请求,将它们添加到数据库中 <ul> <li>Ben <a href="#" onclick="return addPerson(1);">Add</a></li> <li>Sarah <a href

我已经做了很多搜索,我不认为我能找到我要找的

我有一个类似于twitter的系统,你只需点击一个按钮就可以添加(或在twitter中跟踪)多个人

例如,每次我单击下面的“添加”按钮时,它都会发出一个AJAX请求,将它们添加到数据库中

<ul>
    <li>Ben <a href="#" onclick="return addPerson(1);">Add</a></li>
    <li>Sarah <a href="#" onclick="return addPerson(2);">Add</a></li>
    <li>Chantelle <a href="#" onclick="return addPerson(3);">Add</a></li>
    <li>Alan <a href="#" onclick="return addPerson(4);">Add</a></li>
</ul>
  • 莎拉
  • 尚特尔
  • 艾伦
现在,如果我一个接一个地为每个人单击add按钮,我不认为为每个人排队一个ajax请求将是对资源的良好利用。再加上它会很慢

在我点击每个“添加”按钮后,我所想的可能是延迟或类似的事情。所以它记录了我点击的人的所有ID,并为所有点击的人发送一个ajax请求


有现成的脚本吗?或者你能推荐我如何做吗?

像这样的东西能奏效吗

var sendDelay;
var peopleToSend = [];
addPerson = function(id) {
   if (sendDelay!=null) {
      clearTimeout(sendDelay);  // Clear timeout
   }
   sendDelay=setTimeout(addPersonDelayComplete,2000);  // Reset timeout
   peopleToSend.push(id);  // Add person to array
}

addPersonDelayComplete = function() {
   // Send the people in peopleToSend in a single ajax call here
   peopleToSend.length = 0;  // Reset the array
 }

可能:一个全局
boolean
变量,用于检查AJAX是否已经在运行;如果是这样,请使用
setInterval()
继续检查,直到AJAX运行
complete()
后重置变量。。。未经测试,但在理论上应该有效。多么传奇!真的很感激,这是开箱即用的!但是这个解决方案不考虑AJAX的状态。如果AJAX仍在加载以前的请求怎么办?@ShivanRaptor-您可以同时处理多个AJAX请求。OP没有要求将其限制为仅一个ajax请求。他们要求实现一个延迟,当延迟过去而没有添加任何新的人员时,使用自上次请求以来收集的所有新名称发出ajax请求。