2012-05-04 8 views
1

У меня возникли небольшие проблемы с выяснением того, как сделать действие при отправке формы, но перед ее отправкой. Дело в том, что тег действия перенаправляет пользователя на другой сайт, и мне нужно, чтобы AJAX отправил электронное письмо при нажатии кнопки отправки. Пользователь должен быть перенаправлен даже в случае сбоя AJAX.jQuery: Ajax перед отправкой формы

Я читал о $ .ajax(), но я не понимаю, как остановить подачу формы до тех пор, пока jQuery не получит ответ. Это делается автоматически?

В другом потоке я видел, что вместо отправки следует использовать кнопку ввода «кнопка». Я знаю, что это позволило бы мне вручную создать $ (form) .submit(); позже, давая мне лучший контроль, но я все еще изо всех сил пытаюсь полностью понять предыдущую часть.

Я знаю, что ответ на этот вопрос очень прост, и я, вероятно, бегу в кругах, усложняя себя!

Благодарим за помощь!

ответ

8

Чтобы предотвратить отправку формы, пока Ajax запрос не завершится, вы можете отключить опцию async.

$.ajax({ 
    url: 'my_url.php', 
    async:false, 
    ..... 
}); 
+0

Итак, когда $ .ajax() получает ответ, остальная часть кода jquery выполняется? Должен ли я устанавливать параметр успеха с чем-то особенным? – Ignacio

+0

Нет, вам не нужно ничего делать с параметром успеха. Когда вы устанавливаете 'async' значение false, функция $ .ajax не возвращается до тех пор, пока не получит ответ, так что остальная часть вашего кода будет отложена до завершения запроса. –

+0

Это решение было очень легко реализовать и произвело чудеса, спасибо! – Ignacio

1

Рекомендация, которую вы видели в другом месте, - это именно то, что вам нужно сделать.

Необходимо немедленно отправить заявку. (по return false ing или по телефону e.preventDefault()) Затем, когда вы получите ответ от сервера, вы можете повторно отправить форму в обратном вызове AJAX.
(просто убедитесь, что вы не делаете запрос AJAX снова во второй раз)

0

Вы можете использовать атрибут формы onSubmit.

<form action="./something.php" method="post" onSubmit="someFunction();"> 

Если функция возвращает true действие по умолчанию имеет место, в противном случае предотвращается действие по умолчанию.

Смежные вопросы