背景:登録/支払いページを作成中です。私たちの哲学は、最初にサーバー側ですべての検証とエラーチェックをコーディングし、次に2番目のステップとしてクライアント側の検証を追加することでした(邪魔にならないjQuery)。
サーバー側のダブルクリックを無効にしたかったので、同時投稿/競合状態を処理するためのロックされたスレッドセーフなコードを作成しました。これをテストしようとすると、ポストまたは競合状態を同時に発生させることはできないことに気付きました。
(とにかく古いブラウザでは)送信ボタンをダブルクリックすると、次のように機能すると思いました。
- ユーザーが送信ボタンをダブルクリックします。
- ブラウザは最初のクリックで投稿を送信します
- 2回目のクリックで、ブラウザは最初の投稿をキャンセル/無視し、2番目の投稿を開始します(最初の投稿が応答とともに返される前)。
- ブラウザは、最初の投稿応答を無視して、2番目の投稿が戻るのを待ちます。
サーバー側から見ると、サーバーは2つの同時投稿要求を受け取り、実行して両方に応答します(最初の応答を誰も聞いていないことに気づいていません)。
私たちのテスト(FireFox 3.0、IE 8.0)から、これは実際に起こることです:
- ユーザーが送信ボタンをダブルクリック
- ブラウザは最初のクリックで投稿を送信します
- ブラウザは2回目のクリックをキューに入れますが、最初のクリックからの応答を待ちます。
- 最初のクリックから応答が返されます(応答は無視されますか?)。
- ブラウザは2回目のクリックで投稿を送信します。
したがって、サーバー側から:サーバーは単一の投稿を受信し、それを実行して応答します。次に、サーバーは2番目の要求を受信し、それを実行して応答します。
私の質問は、これは常にこのように機能しましたか(そして私は私の心を失っています)?それとも、これは最新のブラウザの新機能であり、同時投稿がサーバーに送信されるのを防ぎますか?
サーバー側のダブルクリック防止については、同時投稿や競合状態を気にする必要がないようです。キューに入れられた投稿についてのみ心配する必要があります。