Отправить две формы с одной кнопкой - PullRequest
43 голосов
/ 21 октября 2011

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

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

Ответы [ 7 ]

36 голосов
/ 21 октября 2011

Вы можете сделать это с помощью 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();
}
33 голосов
/ 21 октября 2011

При отправке формы страница переходит на 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();
10 голосов
/ 21 октября 2011

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

9 голосов
/ 29 октября 2013

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

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

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

6 голосов
/ 01 июня 2017

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

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

(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 ?).

Хотя я не проверял код.

0 голосов
/ 20 июля 2016

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

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 не отправляет две формы одновременно. мы отправляем две формы с одной кнопкой не одновременно , а после secounds.

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

0 голосов
/ 21 октября 2011

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

document.getElementById('otherForm').submit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...