Подтверждение в форме отправки - PullRequest
1 голос
/ 01 февраля 2012

Я хочу показать подтверждение (точнее всплывающее окно), когда форма успешно отправлена. Ранее я использовал Ajax для проверки формы и отображения всплывающего окна, но теперь я хочу добиться того же без Ajax .
Есть ли какое-либо событие в javascript / Jquery, которое вызывается после успешной отправки формы?или есть ли другая альтернатива?

Спасибо!


РЕДАКТ. 1:
Я использую Spring 3.0.
Вот подробный сценарий
1. Пользователь заполняет форму и нажимает на кнопку отправки
2. Запрос будет отправлен контроллеру (на стороне сервера).
3. Проверка будет выполнена на стороне сервера.
4. Если присутствуют ошибки, я использую валидацию Spring, чтобы показать его и перейти к шагу 1
5.. еще успешно отправить форму и показать всплывающее окно.
6. После того, как пользователь нажимает на всплывающее окно, перенаправить на другую страницу.


РЕДАКТИРОВАТЬ 2:
Я полностью согласен с мнением, что Ajax является правильным / лучшим способом сделать это, и я уже реализовал его с помощью Ajax.Но клиент хочет использовать не-AJAX подход, и я не могу выйти за рамки его слов.

Ответы [ 4 ]

2 голосов
/ 03 февраля 2012

Этот вопрос пробудил мое любопытство, когда я пытался сделать нечто подобное , используя решение iframe , предложенное Леоном.В конце концов мне это удалось, однако я хотел бы предложить, чтобы вместо прямого свойства onload вы использовали jQuery .load() событие в iframe.

Редактировать: Итак, вот как я настраивал форму (используя HTML5, поэтому кавычки не нужны):

<div id=message></div> /* Example-specific, see below */

<form method=post action=backend.php target=iframe>
    // Form data here
</form>

<iframe name=iframe></iframe>

Я добавил следующий код CSS, чтобы скрыть iframe:

iframe {
    border:0px;
    height:0px;
    visibility:hidden;
    width:0px;
}

Не используйте display:none, так как некоторые браузеры отказываются отправлять элемент, который не отображается.

Тогда в моем $(document).ready() JavaScript ...

$('iframe').load(function(){
  // Your load event here.
});

Вы также можете изменить это так, чтобы он специально запускался только после определенного события (например, если вы используете динамические формы).В таком случае вы можете использовать .unbind('load') перед .load(), чтобы предотвратить вызов ранее добавленных .load() функций.

Теперь, когда форма отправлена, она загружается в скрытый iframe.Когда iframe загружает страницу (в моем примере это backend.php), он запускает функцию .load().В моем конкретном случае я настроил <div id=message> для отображения сообщения:

$('iframe').load(function(){
    $('#message').html('The form successfully submitted.');
});
2 голосов
/ 01 февраля 2012

без Ajax? Нет проблем - давайте вернемся к тому, как на самом деле раньше работала сеть; -)

Поскольку я получаю, вы не хотите обновлять текущую страницу, как насчет этого подхода:

  1. иметь скрытый iframe на той же странице с именем и идентификатором
  2. укажите целевое свойство вашей формы на имя, указанное на предыдущем шаге
  3. отправка формы теперь будет «скрыта»
  4. вы можете иметь свойство onload в iframe, настроенное на метод javascript, который вам по вкусу будет вызываться после завершения отправки формы
  5. этот код javascript может также извлекать содержимое iframe и проверять ваш ответ на стороне сервера (возможно, даже включая сообщение об ошибке)
  6. уведомить пользователя о результате

Это довольно легко настроить, дайте нам знать, как это работает для вас ..

1 голос
/ 01 февраля 2012

Я не уверен, на каком языке вы кодируете. Один вариант - использовать javascript.

В событии onclick кнопки submit (событие на стороне клиента) выполните проверку страницы и отобразите всплывающее предупреждение, если страница действительна.

<script type="text/javascript">
    function OnSubmitClientClick() {
        Page_ClientValidate();
        if (Page_IsValid) {
             alert('Form has been successfully submitted.');
            return true;
        }
    }
 </script>
0 голосов
/ 01 февраля 2012

Почему вы хотите отказаться от AJAX-подхода?Без AJAX проверка на стороне сервера подразумевает перезагрузку страницы.При перезагрузке страницы вы потеряете состояние на стороне клиента (JS).

Одна альтернатива - использовать скрытый фрейм / iframe / новое окно для проверки на стороне сервера при отправке формы (возможно, используйте всплывающее окно, на которое вы ссылаетесь)в твоем вопросе).Что, на мой взгляд, не является правильным подходом (БОЛЬШОЕ НЕТ).Вы можете придерживаться AJAX или использовать способ отправки формы без AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...