- ベストアンサー
1つのボタンで2つのCGIを起動する
1つのボタンで2つのCGIを起動する htmlのページでjavascriptを用いて1つのボタンで2つのCGIを同時に起動できないか試行錯誤していたのですが、なかなかうまくいきません。 具体的にCGIの1つは、textareaの内容をフォームで送るもので、もう1つは、ボタンが押される度にカウントアップしていき、10回毎にメールが届くというものです。 ですので、実際画面として表示されるのはtextareaの送信結果のみで十分です。 どなたか2つのCGIを同時に起動する方法をご存じの方は御教授願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> No.1 お礼 > 最低限、1つのフレームからボタンを押すと、フレームを2つに分割し、それぞれの結果を表示する程度にはしたいと思っています。 textareaの送信結果画面に<iframe>を作って、そのsrcをカウンターCGIにするのはどうでしょうか。 <frameset>でもできますが、<frameset>の出力から送信結果を表示する<frame>への遷移がちょっと手間(セッション管理が必要)になりそうです。
その他の回答 (3)
- yyr446
- ベストアンサー率65% (870/1330)
No.1です。ちょっとシンプルにして試してOKでした。 <form action="ページ遷移するCGI" method="post"> <input type="textarea" id="data" name="data"> <button type="button" onclick="multisend(this.form)">2つ送信</button> </form> <script type="text/javascript"> function multisend(frm){ var xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", "カウントアップのCGI" , true); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlhttp.send(encodeURIComponent("data="+frm.data.value)); xmlhttp.onreadystatechange = handler; function handler(){ if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { frm.submit(); } } } } </script>
お礼
回答ありがとうございます。 実際に試すところまでやって頂いてありがとうございます。 このプログラムだとフォームと同時にカウントも動いていました! …ただ1つ問題がありまして、10になるとカウントはちゃんとリセットされているのに、 メール送信が行われなくなってしまいました;
- yyr446
- ベストアンサー率65% (870/1330)
カウントアップしていく方のCGIリクエストは、ページ遷移する 必用がなさそうなので、フォームサブミットじゃなく、AJAXの 非同期通信(XMLHttpRequest)でPOSTするってのはどうでしょう。 フォームのaction属性は、非同期通信の関数にしておいて、 コールバック関数内のjavascriptでそのフォームの送信先を 変えてサブミットするとか <form action="xhr(this)" method="post" id="frm"> <input type="textarea" id="data"> <input type="submit" value="2つ送信"> </form> <script type="text/javascript"> function xhr(frm){ var xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", "/カウント.cgi" , true); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlhttp.send(encodeURIComponent("data="+frm.data.value)); xmlhttp.onreadystatechange = handler; function handler(){ if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { frm.action="/登録.cgi"; //frmで参照できなかったら、document.getElementById("frm")でも使おう frm.submit(); } } } } <script> だめかな、試してません
- DIooggooID
- ベストアンサー率27% (1730/6405)
一般的には、CGI Aを起動し、 CGI Aの中から、CGI B 、CGI C 、 ・・・ を起動するようにします。
お礼
回答ありがとうございます。 しかし、その方法では既に実装済みです。 また、最初からフレームを2つ用意する方法、別枠で表示する方法も同様です。 最低限、1つのフレームからボタンを押すと、フレームを2つに分割し、それぞれの結果を表示する程度にはしたいと思っています。
お礼
<iframe>はいいかもしれませんね! 画面として出力することによってメールが送信されない問題も解決できるような気がします。 少し調整して試してみます。