2013-03-22 2 views
0

Этот код, который я создал:Последовательная 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 post последовательно в соответствии с его индексом массива его данных? и это тоже важно, как определить событие onComplete() для последнего запроса ?. Заранее спасибо.

+2

'if (data =" success ")' Я думаю, вы хотели разместить '==' – aram90

ответ

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 до тех пор, пока предыдущий не завершит свои раунды; вы можете сделать это несколькими способами, но лучшим вариантом будет, вероятно, функция, которая выполняет 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); 
Смежные вопросы