Отправить две формы с помощью одной кнопки - программирование

Отправить две формы с помощью одной кнопки

У меня есть HTML две формы: одна, которая отправляет данные при входе в базу данных с помощью PHP, другая направляет пользователя на страницу оплаты Paypal, моя проблема заключается в том, что пользователь должен будет представить обе формы, которые, конечно, я не хочу, чтобы они делали. Есть ли способ использовать одну кнопку отправки для двух форм?

(Javascript приветствуется)

4b9b3361

Ответ 1

Вы должны сделать это с помощью JavaScript:

<input type="button" value="Click Me!" onclick="submitForms()" />

Если ваши формы имеют идентификаторы:

submitForms = function(){
    document.getElementById("form1").submit();
    document.getElementById("form2").submit();
}

Если ваши формы не имеют идентификаторов, но имеют имена:

submitForms = function(){
    document.forms["form1"].submit();
    document.forms["form2"].submit();
}

Ответ 2

Подача формы приводит к тому, что страница перемещается в action формы. Таким образом, вы не можете представить обе формы традиционным способом. Если вы попытаетесь сделать это с помощью JavaScript, вызвав form.submit() для каждой формы подряд, каждый запрос будет прерван, за исключением последнего представления. Итак, вам необходимо отправить асинхронно первый вариант с помощью JavaScript:

var f = document.forms.updateDB;
var postData = [];
for (var i = 0; i < f.elements.length; i++) {
    postData.push(f.elements[i].name + "=" + f.elements[i].value);
}
var xhr = new XMLHttpRequest();
xhr.open("POST", "mypage.php", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(postData.join("&"));

document.forms.payPal.submit();

Ответ 3

Вы можете отправить первую форму с помощью AJAX, иначе передача одного из них будет препятствовать отправке другого.

Ответ 4

В Chrome и IE9 (и я догадываюсь обо всех других браузерах) только последний будет генерировать сокет, первый будет отброшен. (Браузер обнаруживает это, поскольку оба запроса отправляются в пределах одного "JavaScript-времени" JavaScript в вашем коде выше, и отбрасывает все, кроме последнего запроса.)

Если у вас есть обратный вызов какого-либо события, сделайте второе представление (но до получения ответа), сокет первого запроса будет отменен. Это, безусловно, нечего рекомендовать, поскольку сервер в этом случае вполне может обработать ваш первый запрос, но вы никогда не узнаете наверняка.

Я рекомендую вам использовать/генерировать один запрос, который вы можете выполнять на стороне сервера.

Ответ 5

В настоящее время выбранный лучший ответ слишком нечеткий, чтобы быть надежным.

Мне кажется, это довольно безопасный способ сделать это:

(Javascript: использование jQuery для упрощения записи)

$('#form1').submit(doubleSubmit);

function doubleSubmit(e1) {
    e1.preventDefault();
    e1.stopPropagation();
    var post_form1 = $.post($(this).action, $(this).serialize());

    post_form1.done(function(result) {
            // would be nice to show some feedback about the first result here
            $('#form2').submit();
        });
};

Поместите первую форму без изменения страницы, дождитесь завершения процесса. Затем опубликуйте вторую форму. Второе сообщение изменит страницу, но вы можете захотеть иметь похожий код и для второй формы, получив второй отложенный объект (post_form2?).

Я не тестировал код.

Ответ 6

если вы хотите отправить две формы одной кнопкой, вам нужно сделать это:

1- использовать setTimeout()

2- разрешить показ всплывающих окон           

<script>
function myFunction() {
setTimeout(function(){ document.getElementById("form1").submit();}, 3000);   
setTimeout(function(){ document.getElementById("form2").submit();}, 6000);   
}
</script>
<form  target="_blank" id="form1">
<input type="text">
<input type="submit">
</form>
<form target="_blank" id="form2">
<input type="text">
<input type="submit">
</form>

javascript не отправляет одновременно две формы . мы представляем две формы одной кнопкой не в то же время, но после сеансов.

edit: , когда мы используем этот код, браузер не разрешает всплывать.
если вы используете этот код для своего программного обеспечения, как я, просто установите браузер для отображения всплывающих окон, но если вы используете его при проектировании сайта, браузер является барьером, а код не запускается.

Ответ 7

Если у вас есть обычная кнопка отправки, вы можете добавить к ней событие onclick, которое выполняет следующие действия:

document.getElementById('otherForm').submit();