2013-03-22 45 views
0

此代碼我已經創建:連續jQuery的阿賈克斯後

$("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

'if(data =「success」)'我想你的意思是把'==' – aram90 2013-03-22 14:02:11

回答

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函數的第二個。

1

如果數據必須按順序到達,那麼您需要延遲執行進一步的POST,直到前一個POST完成爲止;你可以通過很多方式來做到這一點,但最好的選擇可能是一個AJAX POST並接受下一個項目/索引或任何參數的函數,並在AJAX調用的回調函數中調用它自己。

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

然後調用:

submitData(items, 0);