• 締切済み

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