質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

2056閲覧

submit後に実行される処理が先に行われる場合があるか

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2017/09/13 12:11

編集2022/01/12 10:55

###発生している問題・エラーメッセージ

submit()後に処理される関数がsubmit前か処理中に行われた

java(struts)でWEBアプリを作っています。
ある画面にて登録処理を行うとサーバーに入力した項目の値が渡ってこない現象が発生しました。

ソースは下記のようになっており

javascript

1function 登録ボタンクリック処理() { 2 // 登録ボタン非活性処理 3 buttonDisabled(); 4 // 入力チェック 5 validation(); 6 // 送信 7 form.submit(); 8 // 入力項目非活性 9 inputDisabled(); 10}

パラメータが渡ってこないということはsubmit時に入力項目が非活性になっていたことが考えられるのですが、
submit後に入力項目を非活性にしているため、何が悪さをしているのかわからず困っています。
※submit後に入力項目を非活性にしているのは、画面がロックされているように表現するためです。

###試したこと
submitは再送することがあるという仕様を見つけたので、入力項目の非活性処理が行われた後に
再送されるとどうなるか試してみました。
(submit時にネットワークの無効・有効を利用)
結果はsubmit実行時の状態で作成されたパラメータが正常に送信されてしまい、期待通りになりませんでした。
※ただしこの方法だとsubmitのリクエストは保留中となり、再送が行われたかは微妙ではあります。

###知りたいこと
・submit後に実行される処理が先に行われる場合があるか?
・submitの再送時にパラメータを再作成することがあるか?
・入力項目の非活性以外に入力項目の値が飛んでこない場合があるか?
・今回試したやり方以外でのsubmitの再送方法

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

考えられる可能性

ソースが断片的なので確かな事はいえませんが…。

  • もし、submitイベントハンドラ内で disabled にしたならば、submitイベントハンドラは submit 前に発火するので、その症状になります。
  • そもそも論として、inputDisabled() が阻害している可能性を考慮しているのでしたら、何よりも先にinputDisabled() をコメントアウトして検証してみるべきだと思います。disabled が先なのか、後なのかは後で検証しても構いませんが、本当にそれが原因なのかは先に確かめるべきです。
  • 開示できるコードが少ないためにコードが断片的になっているのだと思いますが、そういう場合は本番コードとは別にテスト環境を用意して下さい。再現可能な最小限のコードになるまでコードを削っていけば、自ずと原因が絞り込めます。

ログの確認

パラメーターが渡っていないということは、経路上のどこかで通信されていない事は間違いないので、経路上の全てのログを洗い出して下さい。

  • Fiddler で通信ログを取る
  • ネットワーク系路上にある全てのネットワーク機器のログを確認(ポートのLinkDown履歴がないか、NATセッション制限で通信がブロックされてないか、等)
  • Webサーバのログを確認
  • サーバサイドスクリプト側でログを出力して確認

輻輳調査

輻輳はネットワーク経路上のどこても発生しうるのて、一つずつ確認していきます。

  • クライアント側のISP (biglobe, nifty, OCN, IIJ等) の網終端装置
  • クライアント側の回線業者(NTT, KDDI等)の管理する機器
  • クライアント側のネットワーク機器(ルータ、SW-HUB等)
  • サーバマシン
  • サーバ側のISPの網終端装置
  • サーバ側の回線業者(NTT, KDDI等)の管理する機器

サーバ側はホスティングサービスに問い合わせるとして、クライアント側のISP、回線業者は回線ID、PPPoEアカウント等の回線が特定出来る情報があれば、問い合わせる事が可能です。
NTT以外は過去にさかのぼって輻輳調査を依頼することが可能なので、現象発生時刻を添えて問い合わせれば、輻輳状態を確認してくれます。

クライアント側のネットワーク機器は各機器にログインして、ログを確認して下さい。

リアルタイムに輻輳状態を確認するには、1000byteのpingパケットを送信し続け
て、pingロス率を確認する方法があります。
https://www.google.co.jp/search?q=ping+コマンド

Re: winwin さん

投稿2017/09/13 14:52

編集2017/09/14 23:28
think49

総合スコア18156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/09/14 01:55

ご回答ありがとうございます。 この現象ですが、非常に再現率が低いのと(1/100000)机上ではありえないことが起きているので困っております。 引き続き再現可能な条件を探ってみます。
think49

2017/09/14 04:48

試行回数が10000回に達したのですか…。 そこまで、再現率が低いのであれば、輻輳が起きてないか等のネットワーク系統も疑ってみるべきだと思います。 あるいは、特定端末起因の可能性はないのてしょうか。
退会済みユーザー

退会済みユーザー

2017/09/14 07:20

まだ1回しか再現していないので、特定端末起因の可能性なのかもわからない状態です。 輻輳が起きたことにより、入力項目が非活性の状態でリクエストの再送が行われてしまい、パラメータが欠落したという線を疑っております。 ただ輻輳を発生させるのが難しく困っております。
think49

2017/09/14 23:12

原因究明になりそうな「事実」を詳しく書いて頂くと、直接的な回答を得られるかもしれません。 「もし、submitイベントハンドラ内で disabled にしたならば」もYes/Noの返答がないので、よく分からないです。 コードに原因が可能性を踏まえるなら、どういうコードでsubmitを実行しているのか、を書くべきではないかと。 form.submit()している、submitボタンを押して貰っている、非同期通信で リクエストしている...、いくつか方法はありますよね。 また、通信か発生していない可能性を考慮するなら、「どこまでは通信が発生しているのか」を切り分けるべきだと思います。 ブラウザが通信リクエストしていない、ファイアウォールがブロックしている、ルータが通信をブロックしている、SW-HUBがボートを閉鎖している、...可能性はいくつもあります。 親記事に追記しました。
think49

2017/09/14 23:29

> ただ輻輳を発生させるのが難しく困っております。 輻輳調査について、親記事に追記しました。
退会済みユーザー

退会済みユーザー

2017/09/15 07:48

色々とコメントを頂きありがとうございます。 回答するのが漏れており、申し訳ございませんでした。 抜粋ソースにあるsubmit()ですが、form.submit()で送信しています。 それからsubmitイベントハンドラでは何もしておりません。 なので、submit時に入力項目が非活性になることはありえないと思うのですが、何らかの理由で入力項目非活性処理実行後に再度form.submit()が実行されたことを疑うしかない状況です。 輻輳については頂いた情報をもとに調査してみます。
guest

0

送信直前にdisabledを解除しないといけないのかもしれません。

加えて、submit関数内でもサブミットをする場合は、
ボタン押下時のサブミットはキャンセルしてください。

また、Webでシステムを作るときは、リクエスト毎にどういうパラメータが送られているかを確認する手段を用意しておくといいと思います。
多重サブミット可能かどうかなどの検証にも役に立つと思います。

PS.
submit後の入力項目の非活性化に意味があるように思えないのですが、、、
(ボタン押下後に入力欄を変える時間があるのかと、変えようと思う人がいるのかどうか。。。)

投稿2017/09/13 12:32

編集2017/09/13 16:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/09/14 01:52

ご回答ありがとうございました。 仰る通りsubmit後の非活性化に意味はなく、単純に更新中だから触らないでというのをアピールしたかっただけなんです。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問