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

Тема в разделе "JavaScript", создана пользователем funnywheel, 17 авг 2015.

Модераторы: ZiX
  1. funnywheel

    funnywheel

    Регистр.:
    6 авг 2010
    Сообщения:
    177
    Симпатии:
    111
    Помогите сделать перебор массива яваскриптом и отправку в обработчик поочередно, сейчас моя конструкция выглядит так:
    Код:
    $('#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 - открывается новый коннект, и на серваке открывается куча копий обработчика.

    Помогите сделать так, чтобы отправка второй строки была после того, как вернется ответ от сервера по результатам первой строки.
     
  2. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    У тебя асинхронный запрос. Пока цикл не завершится отправки не будет. Если поставишь синхронный, то будет всё ок. Но будет подвисать браузер. Можно ставить флаги и переменно делать синхронный или асинхронный запрос, если запросов будет очень много.
    Либо, если не много рекурсию:
    Код:
       
    $('#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();
            });
     
    Последнее редактирование: 23 авг 2015