• ベストアンサー

サブウィンドウに値を渡して、CGIにPOSTしたい

お世話になります。 javascript初心者です。 題名のようにPOSTした値をポップアップで確認して、CGIに渡そうとしています。 親ウィンドウのoya.htmは、 <html> <head><title>submitの確認をポップアップで確認</title> <script type="text/javascript"> <!-- function fnWinOpen() { window.open("pop_post.htm", "win", "width=150,height=20"); } //--> </script> </head> <body> <form name="Form_name"> <input type="text" name="Data" /> <input type="button" value="送信" onClick="fnWinOpen()"> </form> </body> </html> でして、 サブウィンドウのpop_post.htmは、 <html> <head><title>submitの確認をポップアップで確認</title> <script type="text/javascript"> <!-- function fnStart() { document.getElementById("SubData").value = window.opener.Form_name.Data.value; } function job( url ) { 後はこの関数を完成さればと考えている } //--> </script> </head> <body onload="fnStart()"> <form method="post" > <input type="text" id="SubData" /> <input type="button" name="sub" value="送信job" onClick="job('thanks.cgi')"> </form> </body> </html> とやっています。 サブウィンドウに値を表示させることはできました。 後は、サブウィンドウの方の job関数で、submitするにはどうすればようのでしょう? 最後に値が渡されるCGI、thanks.cgiでは、そのデータを登録させ、「ありがとうございました」を表示させるものです。 また、そもそもこの方向でうまくできますか? よろしくお願いします。

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

  • ベストアンサー
  • Yohjira
  • ベストアンサー率66% (14/21)
回答No.4

親ウィンドウのformでsubmit(ANo.3の方の回答に書かれている方法)が一番わかりやすいと思います。 まずはANo.1のお礼のスクリプトが理解してみて、 何が悪いのかを確認して、ANo.3の方のやり方を試してみるといいのではないでしょうか。 サブウィンドウが動いている間、親ウィンドウが操作できないようにする処理もあったほうがよさそうですね。 (必須ではないと思いますが) 今までやったことがある方法ですが、 方法1:親ウィンドウにフォーカスが移動したら、強制的にサブウィンドウを閉じる 方法2:showModalDialogを使ってサブウィンドウを開く ダイアログが開いている間は親画面を操作することができなくなりますが、 ちょっと処理が特殊になるので、難しいと思うならお勧めしません。

gahosky
質問者

お礼

基本から積み上げて行きたいと思います。 ありがとうございました。

gahosky
質問者

補足

最後に聞きたいのですが、javacriptのおすすめの参考書やリファレンス本なんかあります?

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。 >サブウィンドウは閉じて、GCIからの出力は、親ウィンドウでされるということがやりたいです。 ANo1にある通り、通常はformタグ内でtargetを指定すればそのwindowが対象となりますが、親windowの場合(最初に開いたwindow)だと名前が設定いないので、指定が難しいようです。(というか、私が知らないだけ) target='' や forms[0].target = window.opener.name などで試して見ましたが見事に失敗しました。 別windowを開いて、親・サブウィンドウとも閉じてしまうか、少し複雑になりますが、親ウィンドウのformでsubmitするという手ぐらいしか思いつきません。 簡単な指定方法があるかも知れませんが、とりあえず親ウィンドウでsubmitするとして・・・ 1)親のformのmethod、actionを設定しておく。 2)サブウィンドウのフォームの値(ご質問例の場合は1個)を、親ウィンドウのフォームへコピー  (サブ側でユーザが値を変更している可能性があるので)   fnStart()  の処理の逆を行えばOKです。 3)親ウィンドウのフォームをサブミット  window.opener.Form_name.submit(); などの方法による 4)サブウィンドウを閉じる。  window.close();  (きちんと確認をしていませんが、親ウィンドウが開いたウィンドウを、子ウィンドウが閉じるので、確認ダイアログがでるかも知れません。ちなみにOperaでは出ませんでした。) ・・・と書いてみましたが、子ウィンドウのボタンを押す前に、親ウィンドウを操作して別の表示にされてしまっていたら、エラー出まくりになりそうですね。 最初に親ウィンドウの表示内容の確認もしておかないといけないかも。 結局、親子でデータの往復をしているので、わざわざ子ウィンドウを開く意味が今いち不明ですが・・・

gahosky
質問者

お礼

私は基本ができてないので、応用が理解できないのだと思います。 丁寧に教えて頂きましてありがとうございました。

gahosky
質問者

補足

子ウィンドウを開く理由は、送信データの確認だけのためにCGIを動かしたくないからです。 最後に聞きたいのですが、javascriptの参考書やリファレンス本で定番のものはあります?

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

CGIからの出力をサブウィンドウで受けるということでいいんですよね? <1>(ANo1の回答と同じですが) job() でdocument.forms[0].submit(); ですが、このままだとactionが不明なので、formタグで <form action="~~thanks.cgi" method="post" > などと指定しておく必要があります。 cgiの呼び出しだけなら、スクリプトからlocation.hrefなどで呼び出せますが、データの受け渡しをするなら、submitするのが簡単。 それなら、スクリプトの呼び出しをonClick="job(this.form)"としておけば、スクリプト側でそのformを特定する必要がなくなるので、そのままsubmitできます。 <2> スクリプト(job())の内容が単にsubmitするだけであれば、サブウィンドウの送信jobボタンを <input type="submit" value="送信job"> とすることで、スクリプトを使用しなくても、そのままで送信できます。

gahosky
質問者

お礼

返答が遅れてすいません。 >CGIからの出力をサブウィンドウで受けるということでいいんですよ>ね? 説明不足でした。“送信job”ボタンが押されたら、サブウィンドウは閉じて、GCIからの出力は、親ウィンドウでされるということがやりたいです。

  • Yohjira
  • ベストアンサー率66% (14/21)
回答No.1

サブウィンドウからでも親からでも、例えば、 document.forms[0].submit();(もしくはnameやidで呼び出し) で送信できると思います。targetやactionの設定も必要だとは思いますが。 (質問の意味がそういうことではないのかな・・・) 「ありがとうございました」の表示方法をどのように考えているのかによっては、 もう少し何らかの考慮がいるかもしれませんね。

gahosky
質問者

お礼

返答が遅れましてすいませんでした。 サブウィンドウのpop_post.htmは、 <script type="text/javascript"> <!-- function fnStart() { document.getElementById("SubData").value = window.opener.Form_name.Data.value; } function job( url ) { document.forms[0].target = "pop_formName"; document.forms[0].method = "post"; document.forms[0].action = "thanks.cgi"; document.forms[0].submit; } //--> </script> </head> <body onload="fnStart()"> <form method="post" > <input type="text" id="SubData" /> <input type="button" name="sub" value="送信job" onClick="job('thanks.cgi')"> </form> </body> </html> こうゆうことでしょうか? 私は基本がわかってないからなのか、これが何をやっているのかわかりません。 「ありがとうございました」の表示は親ウィンドウでしたくて、サブウィンドウの"送信job"ボタンでサブウィンドウが閉じられるようにしたいです。

関連するQ&A

専門家に質問してみよう