プロが教える店舗&オフィスのセキュリティ対策術

formタグでtarget="_blank"要素を指定して、別ウィンドウ(タブ)に結果を戻す仕組みを作成しました。
submitボタンをクリックすると処理が実行され、1回目は問題なく挙動します。

formタグが書かれている画面で2回目以降ボタンをクリックしても全く反応しません。
リロードすると反応するようになります。

リロードすると入力したデータが飛んでしまうので、それ以外の方法で2回以上ユーザーがボタンをクリックした場合submitしたいのですが何か方法はありますでしょうか?
(少し調べてみたら、2回目以降出来なくなる事象は何件か見つかりましたが回避策が良く分かりませんでした。)

別タブに出てくるのであればフォームにtarget="_blank"を入れる形には一切こだわっていません。

よろしくお願いいたします。

A 回答 (3件)

URLが同じ場合はキャッシュが使われます。


URLは、プロトコル、ドメイン、パス情報、クェリーストリングスまで
http: プロトコル
//hoge.com ドメイン
/abc/efg/ PATH_INFO
?abc=efg QUERYSTRING
標準入力は含まない

・一回目の入力内容を、QUERYSTRINGやパス情報に含める。

 いずれにしろ、formは『フォーム処理のためにWebサーバやメールサーバ等のエージェントへとフォームを提出する。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』ためのものですから、処理自体はCGIなどで処理します。
    • good
    • 0

ajaxで処理してみては?



戻り値があるまで、もしくは一定のダミー時間
「処理中」的な画面をだしておくとかすればよいような

本来は次々に入力を変えてサブミットするような仕組みは
あまりよくないんですけどね
    • good
    • 0

手持ちの環境にて確認できませんでした。


ですので以下推測となりますが、原因と対策をいろいろと。

* ブラウザの仕様で、チャタリングによる二重送信防止のため
→ submit 前処理で action の URL 末尾にダミーパラメータを付与(例: ?dummy=HHMMSS)

* submit 前処理で、フォーム内容を変更/破壊するため 2 回目以降にエラー
→ デバッグにて値を確認、特に action 属性とか hidden 要素か

* submit 時のイベント処理で、二度押し防止の仕組みが入っている
→ submit ボタンの disable とか確認

* 上記すべてが駄目だった場合
→ submit 毎に新規に別フォームを生成して submit して使い捨てる
→ フォーム内容のコピーを毎回行う荒業になるのでご注意ください


ちなみに POST の場合なら、仕様上は "not cacheable" な応答を取得するはずなので、
キャッシュが理由となることは考えられません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!