连续Jquery Ajax帖子

时间:2013-03-22 13:59:51

标签: jquery ajax

我创建的代码:

    $("button").click(function(){
       for (var i=0;i<array.length;i++){
         var text = array[i];
         $.post("process.php",
                { data : text},
                function(data){
                  if (data="success"){
                   alert("success");
                 } else {
                   alert(data);}
         });
       }
    });

是工作但不根据数组索引连续发送数据(文本)。我不能一个一个地发送它,因为数组长度将由用户输入。如何根据其数据的数组索引连续发布ajax帖子?而且,这也很重要,如何在最后一个请求中检测onComplete()事件?提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果数据必须按顺序到达,那么您需要延迟执行进一步的POST,直到前一个POST完成其轮次;你可以通过多种方式实现这一点,但最好的选择可能是执行AJAX POST并接受下一个项目/索引或其他任何参数的函数,并在success回调函数上调用自身。 AJAX电话。

function submitData(items, index) {
  if (index < items.length) {
    $.post(
      "process.php",
      { data : items[index] },
      function(data) {
        submitData(items, ++index);
      }
    );
  }
}

然后致电:

submitData(items, 0);

答案 1 :(得分:1)

最干净的解决方案(恕我直言)是一个递归回调循环 - 您只需在上一次AJAX调用完成时触发上一个数据上传。

$('button').click(function() {
    var a = array.slice(0);
    (function loop() {
        var text = a.shift();
        if (typeof text !== 'undefined') {
            $.post(url, {data: text})
             .done(function(data) {
                 // use result
                 ...
             }, loop);  // and iterate
        } 
    })();  // start the loop immediately
});

上面的代码利用了.done延迟对象方法,并传递了两个回调 - 一个是传统的“成功”回调,第二个是触发伪递归回调{{1功能。