Отправка в обработчик строк из массива поочередно

funnywheel

PHP & JS
Регистрация
6 Авг 2010
Сообщения
255
Реакции
219
Помогите сделать перебор массива яваскриптом и отправку в обработчик поочередно, сейчас моя конструкция выглядит так:
Код:
$('#form').submit(function(e) {
  e.preventDefault();
  var array = $('#textarea').val().split('\n');
  var ln = array.length;
  var url = $(this).attr('action');
  var type = $(this).attr('method');

  for (i = 0; i < ln; i++){
    data = "param1=" + array[i];
    $.ajax({
      data: data,
      url: url,
      type: type,
      success: function(data){
        $('#target').append(data);
      }
    });
  }
});

что в обработчике, не суть важно, пусть там будет echo "Hello world!";

Сейчас, если я отправляю форму, все отрабатывает, но как я понимаю, на каждую строку из массива array - открывается новый коннект, и на серваке открывается куча копий обработчика.

Помогите сделать так, чтобы отправка второй строки была после того, как вернется ответ от сервера по результатам первой строки.
 
У тебя асинхронный запрос. Пока цикл не завершится отправки не будет. Если поставишь синхронный, то будет всё ок. Но будет подвисать браузер. Можно ставить флаги и переменно делать синхронный или асинхронный запрос, если запросов будет очень много.
Либо, если не много рекурсию:
Код:
$('#form').submit(function(e) {

          e.preventDefault();

          var array = $('#textarea').val().split('\n');
          var ln = array.length;
          var url = $(this).attr('action');
          var type = $(this).attr('method');

          var array_down = function(array) {
            var clone = array.slice(0);
            return function() {
                  return clone.shift();
                };
          };

          var data_down = array_down(array);
          var run = function() {
            var data = data_down();

            if (typeof(data_down) == "undefined") {
                // last
                return;
            }

            var new_data = "param1=" + data;
            var ajax = $.ajax({
              data: new_data,
              url: url,
              type: type,
              success: function(data){
                $('#target').append(data+" | ");
                run();
              }
            });
          }
          run();
        });
 
Последнее редактирование:
Назад
Сверху