#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 невозможен.