Справочная информация. Мы в процессе написания страницы регистрации/оплаты, и наша философия заключалась в том, чтобы сначала скопировать всю проверку и проверку ошибок на стороне сервера, а затем добавить проверку на стороне клиента в качестве второго шага (un-obstructive jQuery).
Мы хотели отключить двойную кликов на стороне сервера, поэтому мы написали некоторый код блокировки, потокобезопасный для обработки одновременных сообщений/условий гонки. Когда мы попытались проверить это, мы поняли, что мы не можем вызывать одновременное сообщение или состояние гонки.
Я думал, что (в старых браузерах в любом случае) двойной щелчок кнопки отправки работал следующим образом:
- Пользователь дважды нажимает кнопку отправки.
- Браузер отправляет сообщение при первом щелчке
- Во втором клике браузер отменяет/игнорирует начальную запись и инициирует вторую запись (до того, как первая почта вернулась с ответом).
- Браузер ждет возврата второго сообщения, игнорируя исходный ответ.
Я думал, что со стороны сервера это выглядит так: сервер получает два одновременных почтовых запроса, выполняет и отвечает им обоим (не подозревая, что никто не слушает первый ответ).
Из нашего тестирования (FireFox 3.0, IE 8.0) это то, что на самом деле происходит:
- Кнопка двойного нажатия кнопки пользователя
- Браузер отправляет сообщение для первого щелчка
- Браузер приостанавливает второй клик, но ждет ответа от первого щелчка.
- Ответ возвращается с первого щелчка (ответ игнорируется?).
- Браузер отправляет сообщение для второго клика.
Итак, с сервера: сервер получает отдельную запись, которую он выполняет и отвечает. Затем сервер получает второй запрос, который он выполняет и отвечает.
Мой вопрос в том, что это всегда срабатывало так (и я схожу с ума)? Или это новая функция в современных браузерах, которая предотвращает отправку одновременных сообщений на сервер?
Кажется, что для предотвращения двойного клика на стороне сервера нам не нужно беспокоиться о одновременных постах или условиях гонки. Только нужно беспокоиться о поставленных в очередь сообщениях.
Заранее благодарим за любые отзывы/комментарии.
Алекс