• ベストアンサー

1つのボタンで2つのCGIを起動する

1つのボタンで2つのCGIを起動する htmlのページでjavascriptを用いて1つのボタンで2つのCGIを同時に起動できないか試行錯誤していたのですが、なかなかうまくいきません。 具体的にCGIの1つは、textareaの内容をフォームで送るもので、もう1つは、ボタンが押される度にカウントアップしていき、10回毎にメールが届くというものです。 ですので、実際画面として表示されるのはtextareaの送信結果のみで十分です。 どなたか2つのCGIを同時に起動する方法をご存じの方は御教授願います。

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

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

> No.1 お礼 > 最低限、1つのフレームからボタンを押すと、フレームを2つに分割し、それぞれの結果を表示する程度にはしたいと思っています。 textareaの送信結果画面に<iframe>を作って、そのsrcをカウンターCGIにするのはどうでしょうか。 <frameset>でもできますが、<frameset>の出力から送信結果を表示する<frame>への遷移がちょっと手間(セッション管理が必要)になりそうです。

palmist_1987
質問者

お礼

<iframe>はいいかもしれませんね! 画面として出力することによってメールが送信されない問題も解決できるような気がします。 少し調整して試してみます。

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

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>

palmist_1987
質問者

お礼

回答ありがとうございます。 実際に試すところまでやって頂いてありがとうございます。 このプログラムだとフォームと同時にカウントも動いていました! …ただ1つ問題がありまして、10になるとカウントはちゃんとリセットされているのに、 メール送信が行われなくなってしまいました;

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

カウントアップしていく方の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)
回答No.1

一般的には、CGI Aを起動し、   CGI Aの中から、CGI B 、CGI C 、 ・・・ を起動するようにします。  

palmist_1987
質問者

お礼

回答ありがとうございます。 しかし、その方法では既に実装済みです。 また、最初からフレームを2つ用意する方法、別枠で表示する方法も同様です。 最低限、1つのフレームからボタンを押すと、フレームを2つに分割し、それぞれの結果を表示する程度にはしたいと思っています。

関連するQ&A

専門家に質問してみよう