Ну, все находится в заголовке, но я объясню немного больше :-)
Мое приложение для направляющих содержит много форм (Ajaxified или не).
Для предотвращения пользователей для представления дважды или больше некоторые формы я использую JavaScript.
Существует мой сценарий для формы Ajaxified:
Теперь я хочу добавить, что серверный код к сохраняет вещи, действительно убирают, если пользователь обходит JavaScript.
Какие-либо предложения?
Вот что я бы сделал:
Это не предотвратит двойную отправку, но, по крайней мере, предотвратит изменения от второй фиксации. Т.е. когда пользователь отправляет форму второй раз, код проверяет отправленный токен на токен в базе данных, и если они не совпадают - не обновляйте объект.
Это также имеет недостаток для вновь созданных объектов (например, если пользователь хочет создать комментарий или что-то подобное). Но в этом случае вы можете захотеть проверить временной интервал создания от того же пользователя, и если он меньше, скажем, 5 секунд - вы предотвратите «создание» объекта.
1) Хорошо бы также показать какой-нибудь движущийся индикатор, чтобы пользователь знал, что что-то происходит, что его запрос обрабатывается. Это должно устранить множество двойных отправок.
2) Если у пользователя отключен javascript, как вы собираетесь отправлять "ajaxified" формы? Если сайт становится неработоспособным без javascript, то, вероятно, лучше просто уведомить пользователя (как предлагает Eimantas).
Не настоящее предложение (я не удивлюсь дауботам), но будет ли ваш сайт по-прежнему пригоден для использования без JS? Как насчет того, чтобы показать ему соответствующее сообщение о том, что для нормальной работы ему нужно включить JS, иначе вы не будете показывать ему много и много форм на странице.
Не уверен, что это полезно:
НА СЕРВЕРЕ:
При новой загрузке формы, set a session ['variable'] = false // означает, что форма еще не отправлена.
При отправке формы проверьте:
if session ['variable'] == true
{
ничего не делать...
}
еще
{
установить сеанс ['переменная'] = true;
// отправляем логику здесь
}