• 締切済み

submit();submit()--複数リクエスト発行の仕様は?

submit()を連続して起動したときの動作について調べています。下例ではいずれも3回リクエストが発行されると理解していますが、現在のところ、ブラウザやタイミングによって、発行される回数が1~3の間で変化するように見受けられます。動作に関する仕様の記述についてご存じの出典がありましたら、お教えください。 ■調査内容 ・ブラウザにより動作が変わるのか? ・Script内部処理状況によってsubmit処理がスルーされるのか? ・国際標準仕様やベンダー毎の仕様はどのように定義されているか? ■記述例 <input type="submit" value="Foo" onClick="submit();submit()" > <input type="button" value="Bar" onClick="submit();submit();submit()" > ★リクエストの内容・宛先は全て同じとお考えください。 ☆WEBコンテナのマルチスレッド・スレッドセーフの動作テストに利用できるかという視点で調べています。  

みんなの回答

回答No.3

>submit()を何度も行うのはむしろHTMLとして異常だと思います。 はい、おっしゃるとおり。今回はサーバーに同じ内容のリクエストを同時に送り届ける手段として、sybmit()の連続が安定して使えるものなのか興味がありました。 連続投稿テストであれば、送信完了画面でF5キー連打が手っ取り早いと思います。 サーバー側の負荷テストであれば、 Apacheならapachebench(Apacheをインストールしたディレクトリのbin/ab というファイル) を使ったり、 Perl/PHPやJava(JSP、Applet)などで、アプリケーションを作るのが一般的かな、と思います。

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

まだ見ているでしょうか?興味深い内容だったので調査してみました。 > ・ブラウザにより動作が変わるのか? > ・Script内部処理状況によってsubmit処理がスルーされるのか? > ・国際標準仕様やベンダー毎の仕様はどのように定義されているか? submit() はフォームのsubmitボタンをクリックするのと同じ動作をする、と理解しています。 ブラウザではSubmitボタンをクリックした後に、別のSubmitボタンをクリックしてもリクエストは一つだけですよね? 従って、submit() で同時に2つ以上のリクエストを発行することは出来ない、と思っていました。 上手くいくように見えるのはブラウザの独自実装で「初めのリクエストのみ受け付ける」のが正常な気がします。 > 動作に関する仕様の記述についてご存じの出典がありましたら、お教えください。 Operaは見つかりませんでした。 # submitメソッドはDOM関連だからか、ECMAには記述が見あたりませんね。 # DOMは言語依存なしですから、各ブラウザ毎に独自実装している現状なんでしょうか。 form.submit - MDC https://developer.mozilla.org/ja/DOM/form.submit submit http://msdn.microsoft.com/ja-jp/library/cc428183.aspx > ☆WEBコンテナのマルチスレッド・スレッドセーフの動作テストに利用できるかという視点で調べています。 #1の方も言われていますが、Ajaxで実現してはどうでしょうか? AjaxはGET、POSTメソッドのリクエストを発行できます。 Ajax : 勉強用サンプル&解説 http://www.openspc2.org/JavaScript/Ajax/

rivriv
質問者

お礼

think49さま ご回答ありがとうございます。 >上手くいくように見えるのはブラウザの独自実装で「初めのリクエストのみ受け付ける」のが正常な気がします。 片手間なのですが、 Firefox 3.0.10 type="submit",submit() x N を合わせて1発のみ発行         type="button",submit() x N でも同様 IE8.0.6     type="submit",submit() x N を合わせて全発発行(計4発まで試しました。) Eclipse3.4.2(All in one java) の内部ブラウザ―         type="submit",submit() x N を合わせて2発のみ発行         type="button",submit() x N でも同様 動作としては、Firefoxがまっとうのようですが、 IE8のおかげで、Servlet&JSPのマルチスレッド動作のバグがわかりました(笑)。 >Ajax : 勉強用サンプル&解説 週末トライしてみます。ありがとうございました。

回答No.1

> ・国際標準仕様やベンダー毎の仕様はどのように定義されているか? ECMAScriptにはそういう定義はないと思います。(たんにsubmit()でフォームを送信するとだけ書かれていると思います) ベンダーごとの方は仕様書を読んだ事がありませんが、ブラウザの動作がそれぞれ違う事が物語っていると思います。 > ☆WEBコンテナのマルチスレッド・スレッドセーフの動作テストに利用できるかという視点で調べています。 HTMLにはスレッドの概念はなく、1回の動作で1個の処理です。(リンクを1回クリックすると1ページだけ変更される) フォームを送信したらそこでページが書き換わるはずですから、 submit()を何度も行うのはむしろHTMLとして異常だと思います。 サーバーとの通信を同時にいくつも行いたい場合は、 複数のフォームとその数だけのフレーム(インラインフレームまたはtarget="_blank")を用意するか、Ajaxなどを使用するのが良いと思います。

rivriv
質問者

お礼

talooさま ご回答ありがとうございます。 >submit()を何度も行うのはむしろHTMLとして異常だと思います。 はい、おっしゃるとおり。今回はサーバーに同じ内容のリクエストを同時に送り届ける手段として、sybmit()の連続が安定して使えるものなのか興味がありました。 Ajaxの件ありがとうございます。調べてみます。

関連するQ&A

  • 複数のラジオボタン選択肢によりsubmitを押せなくする

    初めて質問させていただきます。 ラジオボタンが下記の選択状態の時だけ「送信(submit)」ボタンを enable で表示させたいです。 1:● 2:○ 1:● 2:○ それ以外の選択肢では「送信(submit)」ボタンを disabl で押せないようにしたいです。 調べて、近い動作にはなりましたが、javascriptに関して 殆ど知識がないため、これから先がさっぱりわかりません。 ぜひ教えを乞いたく参りました。お知恵をお貸しください<(__)> どうぞ宜しくお願い致します。 <HTML> <HEAD> <script type="text/javascript"><!-- function unlock1(el){el.form.send.disabled=false;} function unlock2(el){el.form.send.disabled=true;} //--> </script> <form> 1:<input type="radio" name="radio1" value="1" onClick="unlock1(this)"> 2:<input type="radio" name="radio1" value="2" onClick="unlock2(this)"><br> 1:<input type="radio" name="radio2" value="1" onClick="unlock1(this)"><br> 2:<input type="radio" name="radio2" value="2" onClick="unlock2(this)"><br> <input name="send" type="submit" value="送信" disabled > </form> </BODY> </HTML>

  • Chromeで複数submit

    現在1つのボタンで2つのフォームをsubmitしているのですがGoogleChromeだけ1正常に動作せず困っております。 下記スクリプトでIE、FireFoxはnform、nform2ともにsubmitされるのですがChromeのみnform2(後に記述したほう)のみ実行されます。 解決方法はありますでしょうか? 宜しくお願い致します。 <script language="javascript"><!-- function send() { if(window.confirm('設定してよろしいですか?')){ document.nform.submit(); document.nform2.submit(); }else{   alert('キャンセルしました'); } } //--></script> <form name="nform" action="a.php" target="blank" method="POST"> <input type="hidden" value="a" name="1"> </form> <form name="nform2" action="b.php" method="POST"> <input type="hidden" value="a" name="1"> </form> <button onClick="send()">ボタン</button>

  • submitで。。。

    現在、JBuilderを使ってサーブレット+JSPのWEBアプリを作っています。 悩んでいるのは、IEでバックボタンを使って元のページに戻れないようにしたいのですが、 INPUTのTYPEがsubmitの場合、うまくいかないのです。 調べてみると「location.replace()」を使えばよいようなのですが。。。 現在は以下のようにやっています。(TestServletはサーブレット) <input type="submit" action="javascript:location.replace('TestServlet') ~> <input type="text" name="T1"> <input type="submit" name="Submit" value="TEST"> このようにすると、submitボタンを押した場合、リクエストがTestServletのdoPostでなくて、doGetにいってしまうのです。 そうすると「String 値 =request.getParameter("T1");」のようにしてT1の値を取得しようとしても"null"となってしまいます。 なにか他によい方法があるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • submitについて

    「 <input type=submit value="送信"> 」について。 ボタンの役割というのは分かりますが、submitの使い方がよく分かっていません。このボタンを押した時の処理というのはどこで行うものなのですか。サンプルソースなど、ボタンはsubmitが多く使われているようなのですが・・・。どのようなときに役立つのか教えてください。

    • ベストアンサー
    • HTML
  • WebBrowser 複数のsubmit

    VB初心者です ご指導の程宜しくお願い致します visual basic 2008 でWebBrowserにて webページに複数のname属性のないsubmitがある場合どうやって選択して押す動作をさせるのでしょうか??? 下記:webのソース <input type="submit" value="変更する" class="formBt01" /> <input type="submit" value="戻る" class="formBt02" /> どちらかを選択できるようにしたいです 過去にも同じような質問がありましたが回答の通り試しましたが うまくいきません 自分が試したもの WebBrowser1.Document.Forms(0).InvokeMember("submit") もちろんwebソースにsubmitが二つあるので、動作しません WebBrowser1.Document.Forms(1).InvokeMember("submit") フォームで選ぶのかなと試しましたが何も動作しません WebBrowser1.Document.Forms("ボタンのname").InvokeMember("click") ボタンの名前がわからないので、これは使えず… どなたかご教授お願いします

  • submitについて

    <script type="text/javascript"> <!-- function go() { document.getElementsByTagName("input")[3].value+="text"; } //--> </script> <form name="NAME1" action="#" method="get" onSubmit="go()"> <input type="submit" name="submit1" value="送信1" > <input type="submit" name="submit2" value="送信2"> <input type="button" name="submit3" value="送信3" onClick="go()"> <input type="text" name="text1" size="10"> </form> なのですが、送信2のsubmitを4回クリックすると以下のように表示されるのですが、どういう感じで実行されているのかわかりませんので教えていただけないでしょうか? 一応一回目はtext1=textとなるのですがテキストボックスには空になります。 2回目はtext1=textとなりテキストボックスにはtextが入ります。 3回目はtext1=texttextとなりテキストボックスには空になります。 4回目はtext1=textとなりテキストボックスは空になります。 以上よろしくお願いします。

  • 複数のsubmitボタンを使い値を送信する

    <form action="/サーブレットへ" method="post"> <input type ="TEXT" NAME="text1"> <input type ="TEXT" NAME="text2"><br> <textarea name="zzzz" cols="100" rows="10"> </textarea> <input type="hidden" name="a1" value="3"> <input type="submit" name="a1" value="作成"> <input type="hidden" name="a1" value="2"> <input type="submit" name="a1" value="修正"> </form> 複数のsubmitを使用してそれぞれ違う、値又は変数を渡し処理をしたいのですが、わかりません。 分かる方がいましたら教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • 複数のsubmitボタンで押されたボタンを取得する方法

    form内の、submitボタンの値が拾えません。 1つだけsubmitボタンを設置すると値が拾えますが、 2つ以上submitボタンを設置すると拾えません。 仕様上、無理なのでしょうか? <SCRIPT language="JavaScript"> function move_post(){ alert(document.frmMvPost.btn.value); } </SCRIPT> <FORM name="frmMvPost" action="" method="post" onsubmit="return move_post()"> <INPUT type="submit" name="btn" value="テスト1"> <INPUT type="submit" name="btn" value="テスト2"> <INPUT type="submit" name="btn" value="テスト3"> </form>

  • PHPのsubmitボタンが複数ある場合

    PHPのsubmitボタンが複数ある場合 PHPにて会計システムを開発しているのですが、計算ボタンと、更新してDBに追加するためのボタンとが混在している場合、 $_POST等で押されたボタンの処理を分けることは可能なのでしょうか?下の例は、 name="calculation"が押された場合は、val1とval2の値を計算し、totalへ値を入れます。 name="update"が押された場合は、それぞれのフォームの値をDBに更新をかけます。 <?php <form action="****.php" method="POST"> <input type="text" name="val1" value="20"/> <input type="text" name="val2" value="30"/> <input type="text" name="total" value="50"/> <input type="submit" name="calculation"/> <input type="submit" name="update"/> </form> ?> お分かりになる方、ご教授お願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう