0

我创建的这段代码:

    $("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() 事件?提前致谢。

4

2 回答 2

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延迟对象方法,并传递了两个回调——一个是传统的“成功”回调,第二个是触发对函数的伪递归回调loop

于 2013-03-22T14:11:27.013 回答
1

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

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

然后调用:

submitData(items, 0);
于 2013-03-22T14:04:02.933 回答