Javascript отправляйте все формы одну за другой одним нажатием кнопки

#javascript #php

Вопрос:

Я пытаюсь отправить несколько форм отдельно одну за другой одним нажатием кнопки. Я заполняю свои входные формы переменной SQL $name и id="form<?= $i ?>" в зависимости от результата создаю идентификатор form1,form2 и т.д. Затем мне нужно отправить все эти формы одним щелчком мыши. но отдельно друг от друга, поэтому сначала форма с идентификатором form1, чем form2 и т. Д.

В чем проблема. То, как я это делаю сейчас, отправляет только одну из форм, которая была сгенерирована последней. Что я делаю не так? Консоль не выдает никаких ошибок,и все формы генерируются с правильными идентификаторами (форма 1,форма 2, форма 3 и т. Д.).

PS: Я не могу использовать ajax Xmlrequest по этому вопросу.

 $type = "test"
    $i=0;
        $stmt = $mysqli->prepare("SELECT name FROM account WHERE purpose = ? ");
        $stmt->bind_param('s',$type);
        $stmt->execute();
        $result = $stmt->get_result(); //only works when nd_mysli is set on the server!
    
        while ($rowid = $result->fetch_assoc())
    {
         $name = $rowid['name'];
         
    $i       
    
    
    ?>  <form method="post" id="form<?= $i ?>" target="_external" action="https://www.externalwebsite.com/index/post.php">    
        <input type="hidden" value="<?= $name ?>"  name="sendname" >
        </form>
    
       <?PHP } ?>
       <button id="submit">Submit</button>
       <script>
    
    document.getElementById( 'submit' ).addEventListener( 'click', function () {
        // check for and report errors here
        for( var index = 0; index < document.forms.length; index   ) {
            document.forms[index].submit();
        };
    } );
    
    </script>
 

Комментарии:

1. Почему бы не просто один form с несколькими элементами? Вы можете использовать обозначения массива для имен name="sendname[]" , а затем перебирать их или помещать $id внутрь.

2. Если вам нужно отправлять отдельные материалы, не относящиеся к Xmlrequest, то ваши руки в основном связаны негибкостью удаленного сайта. Я думаю, вам нужно будет заставить пользователя хромать через прогрессивные одноформы. Может быть, сохранить свой прогресс с помощью СЕАНСА?

3. Так что, если я правильно понимаю. Невозможно отправить формы отдельно с помощью javascript?

Ответ №1:

Твоя проблема? Отправка формы (без использования AJAX/выборки) похожа на переход по гиперссылке. Он выгружает текущую страницу и переходит на новую. Поэтому неподписанные формы исчезают.

Возможно, вы сможете сделать это, создав гиперссылки с полями, которые вы хотите отправить на свой сервер, закодированными в качестве параметров URL, и с target="blank" тегами привязки. Они, конечно, будут отображаться как операции GET на вашем сервере.

Но лучше всего вам найти другой способ решения этой проблемы.

Комментарии:

1. Какой другой способ должен быть возможен? Формы и кнопки отправки также могут быть видны все вместе. У меня их более 10 штук. Когда я нажимаю их все 10 один за другим, проблем нет. Итак, разве нет решения, которое воссоздает этот щелчок или отправку формы?

Ответ №2:

Если вы не используете/не можете использовать AJAX…
Вы можете загрузить все свои формы в iframes. Когда каждая отдельная форма отправляет iframe, он может перезагрузиться или сделать все, что скажет formAction, но главное окно вашего пользователя останется как есть.

 <iframe src="my-first-form.php"></iframe>
 

В противном случае браузер будет следовать форме action и обновлять/перемещаться по странице.

Ответ №3:

Если бы вы каким-то образом получили возможность использовать AJAX, основным примером был бы:

 var i = 0;
$('form').each(function() {
   var url = $(this).attr('action');

   $.ajax({
      url: url,
      method: 'POST',
      data: $(this).serialize(),
      beforeSend: function () {
          i  ;

          console.log('Submitting form #'   i);
      },
      success: function(response) {
          console.log('Done', response);
          $(this).trigger('reset'); // clear all fields in this form
      }
   });
});
 

Комментарии:

1. Если вы прочитали вопрос: «PS: Я не могу использовать ajax Xmlrequest по этому вопросу».

2. Если вы прочитали ответ: «Если бы вы каким-то образом получили возможность использовать AJAX», можете ли вы придумать какую-либо логическую причину, по которой AJAX был бы невозможен, если бы его крайне неортодоксальная попытка была?

3. Напоминает мне: «У меня непереносимость лактозы» «Если вы все равно хотите попробовать йогурт, я знаю отличный магазин!» 😉 😛

4. Вероятно, проблема XY, если решение таково: Используйте iframes. Я думаю, что согласен с @O. Джонс-найди совершенно другой способ.

5. Веб-сайт tagrets-это не один и тот же сервер. Поэтому ajax невозможен.