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);}
         });
       }
    });

は動作しますが、配列インデックスに従ってデータ(テキスト)を連続して送信しません。配列の長さはユーザーが入力するため、1つずつ送信することはできません。データの配列のインデックスに従ってajaxを連続して投稿する方法は?そして、これも重要です。最後のリクエストでonComplete()イベントを検出するにはどうすればよいですか。前もって感謝します。

4

2 に答える 2

1

データが順番に到着する必要がある場合は、前のPOSTがラウンドを完了するまで、以降のPOSTの実行を遅らせる必要があります。これはさまざまな方法で実行できますが、最善の策は、おそらくAJAX POSTを実行し、次のアイテム/インデックスなどのパラメーターを受け入れ、successAJAX呼び出しのコールバックで自分自身を呼び出す関数です。

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 に答える
1

最もクリーンなソリューション(IMHO)は、再帰的なコールバックループです。前の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遅延オブジェクトメソッドを利用して、2つのコールバックを渡します。1つは従来の「成功」コールバックで、もう1つは関数への疑似再帰コールバックをトリガーしloopます。

于 2013-03-22T14:11:27.013 に答える