-PR-
締切済み

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

  • 困ってます
  • 質問No.5027941
  • 閲覧数4239
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 83% (5/6)

submit()を連続して起動したときの動作について調べています。下例ではいずれも3回リクエストが発行されると理解していますが、現在のところ、ブラウザやタイミングによって、発行される回数が1~3の間で変化するように見受けられます。動作に関する仕様の記述についてご存じの出典がありましたら、お教えください。

■調査内容
・ブラウザにより動作が変わるのか?
・Script内部処理状況によってsubmit処理がスルーされるのか?
・国際標準仕様やベンダー毎の仕様はどのように定義されているか?

■記述例
<input type="submit" value="Foo" onClick="submit();submit()" >
<input type="button" value="Bar" onClick="submit();submit();submit()" >

★リクエストの内容・宛先は全て同じとお考えください。
☆WEBコンテナのマルチスレッド・スレッドセーフの動作テストに利用できるかという視点で調べています。
 
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全3件)

  • 回答No.3
レベル14

ベストアンサー率 44% (1016/2281)

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

連続投稿テストであれば、送信完了画面でF5キー連打が手っ取り早いと思います。

サーバー側の負荷テストであれば、
Apacheならapachebench(Apacheをインストールしたディレクトリのbin/ab というファイル) を使ったり、
Perl/PHPやJava(JSP、Applet)などで、アプリケーションを作るのが一般的かな、と思います。


  • 回答No.2
レベル12

ベストアンサー率 59% (285/482)

まだ見ているでしょうか?興味深い内容だったので調査してみました。

> ・ブラウザにより動作が変わるのか?
> ・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

お礼率 83% (5/6)

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
  • 回答No.1
レベル14

ベストアンサー率 44% (1016/2281)

> ・国際標準仕様やベンダー毎の仕様はどのように定義されているか?
ECMAScriptにはそういう定義はないと思います。(たんにsubmit()でフォームを送信するとだけ書かれていると思います)
ベンダーごとの方は仕様書を読んだ事がありませんが、ブラウザの動作がそれぞれ違う事が物語っていると思います。

> ☆WEBコンテナのマルチスレッド・スレッドセーフの動作テストに利用できるかという視点で調べています。
HTMLにはスレッドの概念はなく、1回の動作で1個の処理です。(リンクを1回クリックすると1ページだけ変更される)
フォームを送信したらそこでページが書き換わるはずですから、
submit()を何度も行うのはむしろHTMLとして異常だと思います。

サーバーとの通信を同時にいくつも行いたい場合は、
複数のフォームとその数だけのフレーム(インラインフレームまたはtarget="_blank")を用意するか、Ajaxなどを使用するのが良いと思います。
お礼コメント
rivriv

お礼率 83% (5/6)

talooさま
ご回答ありがとうございます。
>submit()を何度も行うのはむしろHTMLとして異常だと思います。
はい、おっしゃるとおり。今回はサーバーに同じ内容のリクエストを同時に送り届ける手段として、sybmit()の連続が安定して使えるものなのか興味がありました。
Ajaxの件ありがとうございます。調べてみます。
投稿日時 - 2009-06-11 13:04:44
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

-PR-

ピックアップ

-PR-
ページ先頭へ