webdevqa.jp.net

リロード時にフォームを明示的に再送信しないようにするにはどうすればよいですか?

フォームの送信後にページを再読み込み/更新しようとすると、次のポップアップが表示されます。

enter image description here

ただし、続行またはキャンセルの2つのオプションしかありません。 リロードしたいが、フォームを再送信したくない場合はどうなりますか?

1
clickbait

まあ、あなたは本当にできません。これはすべて、サイトのコーディング方法に基づいています。あなたがそれをすることができたとしても、あなたはおそらくあなたのセッションを台無しにするでしょう。

時々できることは、ブラウザのアドレスバーにカーソルを置いてEnterキーを押すことです。これにより、通常は別のページにリダイレクトされますが、サイトが適切にコーディングされている場合は、サーバーとのセッションが不安定な状態になります。本当にあなたがなりたい状況ではありません。

ブラウザがGETの代わりにPOSTを送信しているため、メッセージが表示されます。

デフォルトでは、ブラウザはサーバーに送信された最後のコマンドの状態を再送信します。この場合はPOSTであり、その結果はドキュメントでした。リロードしたいドキュメントそのもの。

これは、複数のページが複数のステップの送信(「ウィザード」)にリンクされている場合に一般的です。複数のページ(手順2で入力した請求先住所など)で状態情報を保持するには、Cookie、サーバー側のセッションメモリ、フォームの値などが必要です。

フォームの値はGETで送信されないため問題であり、生成に必要な情報を含むPOST)ではなく、GETでページを更新すると情報が失われます。ロードした(またはセッションのメモリ内のサーバー側で設定されている)ページ。

フォームを2回投稿することには、2つの一般的な問題があります。最初の危険は、サーバー上ですでに処理が行われており、処理の再実行を要求することは悪いことです(同じアイテムを2回注文するなど)。

2つ目は、投稿の結果としてサーバー側にデータが蓄積されている可能性があり、そのデータを複製する可能性があることです。これは、カートにアイテムを1回追加するのと似ていますが、2つのインスタンスがあることがわかります。これは異常に発生したため、アプリケーションの予想されるフローの範囲外で、開発者はデータの異常な状態を説明できず、何らかの障害が発生したり、必要以上にアクションを実行したりする可能性があります。

1
Frank Thomas