Предотвращение повторной отправки формы без прерывания страницы при нажатии кнопки «Назад» - PullRequest
3 голосов
/ 16 августа 2010

У меня есть страница с формой, где я пытаюсь предотвратить повторную отправку, что довольно просто (на случай, если кому-то интересно, я использовал это

$("form").submit(function()
{
    setTimeout(function()
    {
        $("input").attr("disabled", "disabled");
    }, 50);
});

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

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

Сначала я попытался использовать заголовочные / метатеги, чтобы запретить браузеру кэшировать страницу, но это не сработало (в Firefox 3.6.8), а затем я решил, что не хочу этого делать, потому что он, вероятно, не будет совместим с разными браузерами и, в любом случае, не является оптимальной практикой ( здесь - один из таких примеров). Я не хочу использовать что-либо, что «ломает» кнопку «Назад», как некоторые приложения, которые я видел (например, когда пользователь нажимает на нее, он не возвращает их назад на страницу, а заставляет их оставаться на этой странице). ), что мне кажется плохой идеей. Кто-нибудь знает, как я могу предотвратить повторную отправку формы на стороне клиента, не делая страницу бесполезной, когда пользователь нажимает кнопку «Назад»? (Если это вообще имеет значение, я использую ASP.NET MVC 1).

Ответы [ 2 ]

0 голосов
/ 11 февраля 2013

Почему бы вам не создать случайный ключ, который является уникальным для каждой формы, затем, когда он был отправлен, вставить ключ в базу данных, затем, если этот ключ уже существует в базе данных, форма уже была отправлена, поэтомуне обрабатывать данные во второй раз ... Таким образом, вы не модифицируете DOM и можете быть уверены в целостности данных.

0 голосов
/ 18 августа 2010

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

Если у кого-то есть идеи получше, я все еще открыт для них.

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