こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

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

QNo.5027941

困ってます

この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