• ベストアンサー

JavaScriptのsubmit()がされない

お世話になります。 現在JAVAで開発を行っています。 原因不明の問題が出たので質問させていただきます。 アップロードを子画面に任せたのもを実装しました。 処理の流れは、 1 親ページから子ページを開く。 2 子ページで画像を選びアップする。 3 画像確認画面が開く。 4 期待する画像の場合は、OKボタンを押す。 5 子画面は閉まる。 4の時に正しくsubmitできていない可能性があります。 確認画面の処理 function hogehoge() { window.opener.form.gazou.src = "hogehoge/test.jpg" //1 window.opener.form.gazou.width = "100"; //2 window.opener.form.gazou.height = "100" //3 document.form.flag.value = "true"; //4 window.document.form.submit(); //5 window.close(); //6 } <input type=button name=button1 value=" OK " onClick="hogehoge();"> 1.2.3.6は実際に画面で挙動が確認できるため問題ないと思います。 4.5に関してはJAVAの方のログで確認できる場合と確認できない場合があります。 submitされているならログにはかれているはずなのですが、 はかれていない場合があり、このとき何らかの理由でsubmitが行われていないのではないかと考えています。 IEのバグでwindow.close時にセッションが切れるというバグがあるのを確認致しましたが この可能性があるかもしれません。 どなたか解る方ご教授お願い致します。

  • Java
  • 回答数6
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
noname#19197
noname#19197
回答No.4

>submitされる前にcloseされることはありえるのでしょうか? ありえます。 一般に、何かしらの処理の途中でも×ボタンでウィンドウは閉じられますよね。 それと同じ原理です。 >例えばこの処理がある程度時間のかかるものの場合 リクエスト中にウィンドがcloseされると処理は中断されてしまうのでしょうか? その通りです。 当然、サーバーにリクエストが送信されないので中断されます。 余計なお世話かもしれませんが、この程度の知識もないのに開発をしようと考えてるのが甘いと思います。 この画面についても、つくりが安直すぎるというかもっとうまくできる方法があると思うのですが。

can5974
質問者

お礼

お世話になります。 >余計なお世話かもしれませんが、この程度の知識もないのに開発をしようと考えてるのが甘いと思います。 この画面についても、つくりが安直すぎるというかもっとうまくできる方法があると思うのですが。 申し訳ございません。まさに身にしみております。 登録クラスの一番上にSystem.out.printで通過しているかログをはいてみたところ、 ログが出ないときがありました 登録クラスまでリクエストがたどり着いていない場合があるようです。 やはりwindow.closeがすぐに走るのが問題のようですね 引き続き解析してみます。

その他の回答 (5)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.6

おっと。。。 メモ帳にカキカキしながら貼り付けていたら、貼り付けミスがあった^^; とりあえず、「window.close」の命令文をコメントにして動かしてみればはっきりするんではないでしょうか? という文章をペーストミスで張り落としておりました。 試してみては?-w-

can5974
質問者

お礼

お世話になりました。 完了画面又は、完了画面でクローズで対応しようと思います。 有難うございました。 また機会があればよろしくお願い致します。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.5

とりあえずー。。。 >>すべての処理は登録クラスに飛びます。 ですが、登録クラスは親の方。。。ですよね? 親から子を開いて、子で選択した情報を親に渡し。。。って事は、子から親に情報を渡した時点で、画面をリロードするかとは思うんですがどうでしょうか? >>親画面に画像をJavaScriptで写し とありますが、リロードと同時に画像名を子から親に渡して、親に表示させる。だけですよね? 実際に見てみないと、疑問点が残るばかりです。はい^^;

can5974
質問者

お礼

お世話になります >>親から子を開いて、子で選択した情報を親に渡し。。。って事は、子から親に情報を渡した時点で、画面をリロードするかとは思うんですがどうでしょうか? 親画面自体はリロードしておりません >> とありますが、リロードと同時に画像名を子から親に渡して、親に表示させる。だけですよね? そのとおりです window.closeをやめ 遷移先で完了画面を作成した方がよさそうですね

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.3

こんちくはー。 んー。。。やりたいことが、イマイチわからない^^; 何度か読み返してみたんですけどね。。。 まず、載せてあるソースは子画面のソース。。。ですかね? 「OK」ボタンを押したら、画像が開いて、フラグを立てて、submitして、勝手に閉じる。。。んですかね? とりあえず、どこに対してsubmitしてます? ちょっと、自分の理解度が低いのか、理解できなかったので、補足願いますです。

can5974
質問者

お礼

こんにちは,お世話になります。 説明不足で申し訳ございません。 補足させて頂きます。 上に書いているのは確認画面(子)のソースです すべての処理は登録クラスに飛びます 親クラスで「画像ボタン」を押すと子画面が開きます 子画面で画像を選らんで「確認ボタン」を押すと登録クラスでチェックが走りエラーが無い場合は確認画面(子)になります 確認画面(子)で「OKボタン」を押すと親画面に画像をjavascriptで写し 登録クラスにsubmit後ウィンドを閉じます。 window.closeが早すぎるのが問題な気がしてきました

noname#19197
noname#19197
回答No.2

submitされていないのは、何で確認されましたか? セッションが切れるバグとは無関係な気がします。 5行目と6行目は、非同期なので submitで完全にリクエストが送信される前にウィンドウを閉じてしまっているので、リクエストが送信されていないのではないでしょうか? 5行目と6行目にalertなりを入れて、しばらく待機すると正しくsubmitされると思います。

can5974
質問者

お礼

お世話になります。 正しく動いている場合はtomcatのログがはかれます。 ログがはかれない場合に正しく動いていないことがあったのでsubmitできていないのではないかと考えました。 submitされる前にcloseされることはありえるのでしょうか? 例えばこの処理がある程度時間のかかるものの場合 リクエスト中にウィンドがcloseされると処理は中断されてしまうのでしょうか?

  • BigBoin
  • ベストアンサー率36% (4/11)
回答No.1

formにはactionを書いてますよね? サーバー側に行ってるか、リクエストは行ってるかどうかは呼んでいるはずのjavaで確認(デバッグする、System.out.printする等)してみてはどうでしょう?

can5974
質問者

お礼

お世話になります。 もちろんactionは書いています 基本的には問題なく動いています テスト環境でSystem.out.printをおこなってみます

関連するQ&A

  • JavaScriptでのリロードについて

    ネットで調べていましたが解決する事ができませんでしたので投稿しました。 宜しくお願いします。 ページ間の制御について質問します。 Aページから別ウィンドウを開いてBページを表示しています。 Bページではデータの入力画面→確認画面→完了画面の流れで処理をしています。 Bページの完了画面には別ウィンドウでCページを表示するボタンがあります。 ※Cページを表示する際にBページを閉じています。 Cページではファイルのアップロード画面→確認画面→完了画面の流れで処理をしています。 Cページの完了画面にはCページを閉じてAページをリロードしていますがうまく更新できません。 JavaScriptのソースは下記の通りです。 if(!window.opener || window.opener.closed){ } else{  window.opener.location.reload(); } window.close(); ※このJavaScriptはCページのボタンのonClickに指定しています。 試しに単体で下記のJavaScriptのソースを指定してみましたが駄目でした。 window.opener.opener.location.reload(); どのようにすればCページを閉じてAページをリロードする事ができますか。 似たような内容で申し訳ありませんがご教授、宜しくお願いします。 では、失礼します。

  • 【JavaScript】iFrame内submit

    JavaScriptで、iFrame内のFormをsubmitする方法を教えてください。 条件: iFrameに読み込むページは千差万別で、FormにIDもNameも設定されていない状況(ただし、必ずFromは1つ)で、そのiFrame内のフォームをsubmitする方法。 Form名がわからないですから、getElementsByTagName("form")[0]で呼び出すしかなさそうなんですが、 (iFrameの名前を"ifl"とします)iFrameの外に置いた空アンカーで <a href="#" onclick="parent.ifl.getElementsByTagName(\"form\")[0].submit()">iFrame内をsubmit</a> としても <a href="#" onclick="document.ifl.getElementsByTagName(\"form\")[0].submit()">iFrame内をsubmit</a> としてもうまく動きません(;´Д`) どういうエラーが出てるのか知りたかったので、onclick内部を外出しして、try-catchでくくり function pushSubmit() { try { eval("parent.ifl.getElementsByTagName(\"form\")[0].submit()"); } catch(e) { alert(e); } } としてから、pushSubmit()を空アンカーで実行すると、エラーは「Error: Permission denied for <file://> to get property Window.getElementsByTagName」と返ってきます。 もう、どうにも突き当たってしまいました・・・ どなたか光明を差して下さい・・・orz

  • JavaScriptの配列

    お世話になります。初心者なのでどうすればいいか分かりません。 <? $form = @$_GET["form"]; $name = @$_GET["name"]; function write_color() { RGB = color(); END_OF_HTML; print "window.opener.document.".$form.".".$name.".style.backgroundColor = RGB;"; print "window.opener.document.".$form.".".$name.".value = RGB;"; print <<< END_OF_HTML window.close(); return true; } と現在このように書いているのですが… ここで$nameが配列であった場合、例えばn0[1]といった感じ であった場合どうしても上手くいきません。 単にn0であれば上手くいくのですが。 document.FA1.n0[1].value=RGBとしてみても駄目でした。 何方か教えて頂けませんでしょうか?

  • javascriptにphpの変数を用いる

    JavaScriptでサブウインドウのフォームから親ウインドウのフォームにデータを送るプログラムを書いています。 親ウインドウのページによって処理を変えているのですが、phpの変数を使うと関数自体がエラーになってしまいます。 どう書くのが正しいのでしょうか?教えてください。 プログラムは下記です。 if(page=="0"){ window.opener.document.form_name.input_name.value=input_data; window.close(); } else{   for(i=1; i<6; i++){     var pagename = "page_"+i;     if(page == pagename){ window.opener.document.<?php echo $_GET[form_name]; ?>.<?php echo $_GET[input_name]; ?>.value=input_data; window.close();   } }

  • Javascriptでの小画面表示を閉じた後

    Javascriptでの小画面表示を閉じた場合の親画面の挙動 現在、以下のロジックで親画面から子画面を呼んでいます。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- winAAA = window.open("","winAAA","menubar=no,status=yes,scrollbars=yes,width=600,height=800,resizable=yes"); document.AAA_Form.action="BBB.do"; document.AAA_Form.target="winAAA"; document.AAA_Form.submit(); winAAA.focus(); ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- window.close();を使い、子画面の閉じるボタンで子画面を閉じているのですが、 なぜか、親画面の他ボタンを押下するとwindow.openしてない画面遷移のはずが、 新規子画面で立ち上がってしまいます。 原因がわかる方、ご教示お願いいたします。 動作環境は、以下となります。 OS:XP IE:IE8

  • 子画面を自動で閉じた後、親画面を再描画するJavaScriptが・・・・

    IEだと動くんですけど、Netscapeだと動かないんです。なんかsecurityErrorが出まして・・・。子画面を閉じるまでは動いてるんですが、親の再描画の部分でエラーが出てるようです。どこが原因かお分かりになる方いらっしゃいますか?よろしくお願いします。 <%//処理を何秒後に行うか 時間をset%> function setTimer(){ timer1=setTimeout("clo()",3000); timer2=setTimeout("location()",3000); } <%//windowをclose%> function clo(){ window.close(); } <%//親画面を再描画する%> function location(){ var url='<html:rewrite page="/hogehoge/hoge.do" />'; window.opener.location.href = url+'?member_id='+変数; }

  • javascript submit()の後の動作

    scriptはjsファイルで分離しています。 送信ボタンをクリックした場合の動作は期待通りの動作をしています エンターキーを押したときの動作が、フォームの送信は正常に実行されるのですが、 document.getElementById('ctxt').value= '';が実行されません。 その後、試しにアラートも入れてみましたけど、動作していないようです document.forms[txt_submit].submit();の後の部分が実行されるようにするにはどうしたらいいのでしょうか? function Key_on(){ if(window.event.keyCode == 13){ document.forms[txt_submit].submit(); document.getElementById('ctxt').value= ''; alert('ん?'); } } function send(){ document.txt_submit.submit(); document.getElementById('ctxt').value= ''; } ----------------- <form id="txt_submit" name="txt_submit" action="log.cgi" method="post" target="log" autocomplete="off"> <input type="text" id="ctxt" name="ctxt" size="20" value="" onkeydown="Key_on()"> <input type="button" value="送信" onclick="return send();"> </form>

  • Submitしたボタンを知る方法は?

    <form onsubmit="function()"> <button type="submit" id="button1" name="cmd" value="1">1番を選ぶ</button> <button type="submit" id="button2" name="cmd" value="2">2番を選ぶ</button> </form> とした場合に、function()内で、押したボタンを知るにはどこを見ればよいでしょうか? ちなみに、このあと適当なcgiにpostし、name,valueはそちらで処理する予定ですので、この2つの要素については大幅な変更は出来ません。

  • javascript の locationメソッド

    Javascript で、子(サブ)ウィンドを使っています 子ウィンドを開いて、とある処理を終了後に親ウィンドに指定のURLを表示させて子ウィンドを閉じる、という処理をしたいと思っています。 まず、親ウィンドにURLを渡すところはうまく動きます。 そのページはPHPで作られたページで、できており子ウィンドの処理でセッションに保存されたセッション変数を読み込んで動きます。 ページは遷移するのですが新しいセッション変数が読み込まれません。 ページをリロードすれば動作するので、子ウィンドを閉じる前に親ウィンドを再読込させればよいかな?と思ってreloadを入れてみました。 すると、リロードはしているようなのですが、今度は渡したURLに遷移しなくなってしまいました。 window.opener.location.replace(URL); window.opener.location.reload('true'); window.close(); このような処理はどうすればよろしいでしょうか? それとも諦めるしかありませんか? また、過去に同様な質問があるようでしたら、そのurlを教えていただけると幸いです。 見つけたのですが、探しきれませんでした。

  • 子ウィンドウより親ウィンドウのフォームをsubmit

    親ウィンドウより子ウィンドウをwindow.openにて 表示し、 parent.window.opener.document.form.コントロール名.value="111"; というふうに、子ウィンドウより親ウィンドウのコントロールに値をセットしています。これに親ウィンドウのフォームをsubmitするという処理を追加したいのですが、可能なのでしょうか?? もし可能であれば、その方法を教えてください。 よろしくお願いします!!!! また、子ウィンドウより親ウィンドウのコントロールに値をセットした場合、親ウィンドウのonchangeイベントは発生しないようなのですが、この解消方法はないでしょうか?? よろしくお願いします!!!!