アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前、画面内容を登録するためにFormのsubmitをした後、結果の画面が表示される前に、別のボタンを押すと、内容がnullのFormが送られる現象が発生することを教えていただきました。

このための防止策として、JSPの中で、フラグを定義し、falseであればsubmit処理し、trueであればsubmit処理しないようにコントロールするようにしました。

var flug = false;
function update() {
if (flug) {
return;
}
flug = true;
aaForm.type = "update";
document.aaForm.submit();
}
function check() {
if (flug) {
return;
}
flug = true;
aaForm.type = "icheck";
document.aaForm.submit();
}
function idou() {
aaForm.type = "idou";
document.aaForm.submit();
}


<input type="button" name="add" value="登録" onClick="update();"/>
<input type="button" name="chk" value="検索" onClick="check();"/>
<input type="button" name="ido" value="移動" onClick="idou();"/>



JSPを見ますと、同じ画面の時はflugをによる2重submit防止の手法が使われていますが、画面遷移するときは使われていません。画面遷移するときは、この手法でいいのでしょうか、それとも、画面遷移の時も2重submit防止手法を組み込んだほうがいいのでしょうか。

また、2重submitを防止するための他の手法がありましたら教えてください。

どうぞよろしくお願いします。

A 回答 (1件)

まずお使いの用語に間違いがあるので、訂正させていただきます。



> JSPの中でフラグを定義し、

JSPはサーバサイドJavaで使用されるテンプレート・ファイルですので、間違いです。
正しくはJavascriptです。

> 画面遷移するときは、この手法でいいのでしょうか、それとも、画面遷移の時も2重submit防止手法を組み込んだほうがいいのでしょうか。

ご提示になっているのは「フォーム送信」であり、一般的な遷移であれば、HTML的には<a href..>等によるものを指します(javascriptではlocation.href="..."です)。
function idou() {
location.href="...";
}
で事足りるのと違いますか?

a href="..." とは、「コンテンツの取得」であり、form.submit()は「移動」なので、ニュアンス的にはsubmitが「遷移」という意味で間違いはないのですが。。。。あくまで慣用的に。

また、「登録」と「検索」は、出力される結果が大幅に異なるように思いますので、サーバサイド処理を簡略にする意味で、
form.action = "regist.py"や、form.action = "search.py"などとして、サーバサイド呼び出しを分けたほうがいいと思います。

submit系の処理は、データの正確な送信がもっと重要なので、いかなる場合も多重投稿を防止します。
    • good
    • 0
この回答へのお礼

丁寧なご回答をいただきまして、ありがとうございます。

用語の使い方で、JSPとJavaScriptは同じ物と思っていました。ご指摘ありがとうございました。

>submit系の処理は、データの正確な送信がもっと重要なので、いかなる場合も多重投稿を防止します。

よくわかりました。早速対応したいと思います。

お礼日時:2013/11/10 22:47

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