submit();submit()--複数リクエスト発行の仕様は?
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コンテナのマルチスレッド・スレッドセーフの動作テストに利用できるかという視点で調べています。
投稿日時 - 2009-06-08 21:19:02
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(3)
ANo.3
>submit()を何度も行うのはむしろHTMLとして異常だと思います。
はい、おっしゃるとおり。今回はサーバーに同じ内容のリクエストを同時に送り届ける手段として、sybmit()の連続が安定して使えるものなのか興味がありました。
連続投稿テストであれば、送信完了画面でF5キー連打が手っ取り早いと思います。
サーバー側の負荷テストであれば、
Apacheならapachebench(Apacheをインストールしたディレクトリのbin/ab というファイル) を使ったり、
Perl/PHPやJava(JSP、Applet)などで、アプリケーションを作るのが一般的かな、と思います。
投稿日時 - 2009-06-11 14:31:18
ANo.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/
投稿日時 - 2009-06-11 11:08:17
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 : 勉強用サンプル&解説
週末トライしてみます。ありがとうございました。
投稿日時 - 2009-06-11 13:28:56
ANo.1
> ・国際標準仕様やベンダー毎の仕様はどのように定義されているか?
ECMAScriptにはそういう定義はないと思います。(たんにsubmit()でフォームを送信するとだけ書かれていると思います)
ベンダーごとの方は仕様書を読んだ事がありませんが、ブラウザの動作がそれぞれ違う事が物語っていると思います。
> ☆WEBコンテナのマルチスレッド・スレッドセーフの動作テストに利用できるかという視点で調べています。
HTMLにはスレッドの概念はなく、1回の動作で1個の処理です。(リンクを1回クリックすると1ページだけ変更される)
フォームを送信したらそこでページが書き換わるはずですから、
submit()を何度も行うのはむしろHTMLとして異常だと思います。
サーバーとの通信を同時にいくつも行いたい場合は、
複数のフォームとその数だけのフレーム(インラインフレームまたはtarget="_blank")を用意するか、Ajaxなどを使用するのが良いと思います。
投稿日時 - 2009-06-08 23:18:50
talooさま
ご回答ありがとうございます。
>submit()を何度も行うのはむしろHTMLとして異常だと思います。
はい、おっしゃるとおり。今回はサーバーに同じ内容のリクエストを同時に送り届ける手段として、sybmit()の連続が安定して使えるものなのか興味がありました。
Ajaxの件ありがとうございます。調べてみます。
投稿日時 - 2009-06-11 13:04:44