Остановить обновление с повторной отправки формы - PullRequest
0 голосов
/ 25 августа 2011

Я провел исследование и нашел эту страницу:

Как мне остановить кнопки «Назад» и «Обновить» от повторной отправки моей формы?

Я бы предпочел, если бы я мог избежать использования шаблона Post-Redirect-Get и вместо этого иметь некоторую переменную в форме, когда я отправляю ее в первый раз. Тем не менее, я не знаю, как это сделать, потому что, когда вы нажмете «Обновить», вы снова отправите форму, которую вы только что отправили. Есть предложения?

Ответы [ 3 ]

3 голосов
/ 25 августа 2011

Обычно это делается с помощью перенаправления после запроса POST.Нажатие назад просто перенаправит пользователя снова.Я знаю, вы упомянули, что хотите избежать этого, но я не вижу веских причин.

2 голосов
/ 26 августа 2011

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

Чтобы предотвратить нежелательные эффекты, вам необходимо:

  • используйте post-redirect-get, чтобы последним запросом (повторным отправленным) был тот, который считывает результаты отправки вашей формы, а не саму форму. или
  • поместите идентификатор в форму, чтобы повторная отправка могла быть проигнорирована сервером (хотя пользователь все равно увидит подтверждение «Вы хотите повторно отправить?»)

Мне не известны какие-либо другие варианты, и, учитывая то, как работает «обновление», я действительно не вижу, как могут быть другие. Из этих двух вариантов post-redirect-get обеспечивает максимально чистое взаимодействие с пользователем и является наиболее теоретически «чистым» использованием глаголов HTTP, поэтому обычно оно является предпочтительным и, IMO, правильным решением.

1 голос
/ 25 августа 2011

Отправка уникального идентификатора формы, такого как UUID, вместе с формой в скрытое поле. Следите за тем, какие UUID вы уже видели (возможно, за сеанс, чтобы ваша база данных не росла без ограничений или не нуждалась в периодической обрезке), и молча игнорируйте повторные представления.

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