Ответ 1
Try:
$('#form1').unbind('submit').submit();
Я создаю регистрационную форму для клиента для события, которое они проводят. Основные данные пользователя передаются сторонней системе (например, имя, адрес электронной почты и т.д.), Но остальные поля должны быть отправлены по электронной почте клиенту.
Мне нужно что-то подобное:
Вот код, который я пытался использовать, но он попадает в цикл, который повторно отправляет себя на страницу "электронная почта" и никогда не подчиняется внешнему URL-адресу.
Если я заменил $('#form1').submit();
на предупреждение, он отправляется только один раз на страницу электронной почты и затем корректно отображает предупреждение.
var myvalidator = $('#form1').bValidator(optionsGrey);
$('#form1').submit(function() {
if (myvalidator.isValid()) {
$.ajax({
data: $('#form1').serialize(),
type: "POST",
url: "email_send.asp",
success: function() {
$('#form1').submit();
}
});
}
return false;
});
Любые предложения относительно того, как я могу это исправить?
Try:
$('#form1').unbind('submit').submit();
попробуйте отменить отправку события на ваш успех: метод вашего вызова ajax, вызвав unbind
$('#form1').unbind('submit');
$('#form1')[0].submit(); // call native submit
Вы можете использовать unbind(), чтобы вернуться к поведению по умолчанию.
var myvalidator = $('#form1').bValidator(optionsGrey);
$('#form1').submit(function() {
if(myvalidator.isValid()) {
$.ajax({
data: $('#form1').serialize(),
type: "POST",
url: "email_send.asp",
success: function(){
$('#form1').unbind('submit');
$('#form1').submit();
}
});
}
return false;
});
Я не уверен, что понимаю. Вы всегда отправляете email_send.asp, так что с каждым успехом он делает это, поэтому кажется довольно понятным, почему вы застреваете в цикле.
Если я правильно понял, второй submit должен быть другим URL-адресом с другим обработчиком успеха, правильно?
Итак, вместо отправки формы снова вы можете просто написать базовую функцию ajax:
$('#form1').submit(function () {
if (myvalidator.isValid()) {
$.ajax({
data: $('#form1').serialize(),
type: "POST",
url: "email_send.asp",
success: function(){
$.ajax({
data: $('#form1').serialize(),
type: 'POST',
url: 'third_party.asp',
success: function () {
//display thank you message
}
});
}
});
}
});
РЕДАКТИРОВАТЬ Здесь обновленный ответ в соответствии с вашим комментарием:
var myvalidator = $('#form1').bValidator(optionsGrey);
$('#form1').submit(function(){
if(myvalidator.isValid()){
$.ajax({
data: $('#form1').serialize(),
type: "POST",
url: "email_send.asp",
success: function(){
$('#form1').unbind('submit').submit();
}
});
}
return false;
});
Вы можете использовать плагин jquery.form для отправки формы через ajax. Оформить заказ по следующему URL: http://jquery.malsup.com/form/
Затем в js script попробуйте что-то вроде этого
var myvalidator = $('#form1').bValidator(optionsGrey);
$('#form1').submit(function(){
if(myvalidator.isValid()){
$(this).unbind('submit').submit();
});
У вас есть причина использовать метод submit
? Причина, по которой он вводит бесконечный цикл, состоит в том, что он снова вызывает тот же приемник событий отправки.
Если нет, вы можете просто поставить две очереди ajax-отправлений, одну на страницу электронной почты и еще раз клиенту.
Наконец, вы можете отменить прослушиватель событий. Малоизвестный способ развязать прослушиватель событий - передать объект события в unbind
-call. Это приведет к отключению только текущего прослушивателя событий:
$('#form1').submit(function(e){
if(myvalidator.isValid()){
$form = $('#form1');
$.ajax({
data: $form.serialize(),
type: "POST",
url: "email_send.asp",
success: function(){
$form.unbind(e).submit();
}
});
}
return false;
});
Вот пример кода отправки формы дважды для разных URL-адресов без перенаправления. Дважды нажмите кнопку "Тест".
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#testBtn").click(function() {
$("#form").submit();
$("#form").submit(function() {
$("#form").attr("action", "download");
});
});
});
</script>
</head>
<body>
<form id="form" enctype="multipart/form-data" method="post"
action="upload" target="myIFrame">
<input type="hidden" name="FileName" />
<input type="file" name="FileDialog" size="100" />
<input type="submit" /> <input name="txt" type="text" />
</form>
<input id="testBtn" type="button" value="Test" />
<iframe style="display: none;" src="javascript:''" id="myIFrame">
<html>
<head></head>
<body></body>
</html>
</iframe>
</body>
</html>
У меня была та же проблема. Затем я заметил, что я случайно связал свой файл javascript дважды, поэтому форма была отправлена дважды двумя сценариями. Проблема была решена путем удаления одного нижнего колонтитула страницы script страницы.
<script src="<?php echo base_path; ?>/js/custom.js"></script>
<script src="<?php echo base_path; ?>/js/custom.js"></script>