FRAME SRCで指定したCGIに引数を付けてPOSTで送信することができますか?

[上に] [前に] [次に]
ABCくん [E-Mail] 1999/07/12(月) 18:08:27
例えば
<FRAME SRC="/bin/aaa.cgi?key=1" NAME="fr1">
<FRAME SRC="/bin/bbb.cgi?key=2" NAME="fr2">

とした時に、keyの値をQUERY_STRINGからではなく標準入力から
取りたいんですけど、その様なことは可能なのでしょうか?

ST 1999/07/12(月) 20:06:10
通常のHTMLタグでは無理だと思います。
一番近いのはJavaScriptを使って
document.forms[0].submit();
とでもすることでしょうか。

別々のhtmlファイルを呼び出し,そこから新たにCGIをPOSTで呼び出す,といった形になろうかと思います。

ABCくん [E-Mail] 1999/07/13(火) 13:42:06
ご返事ありがとうございます。
やはりそれしかありませんか。
フレーム画面の前の画面で入力された情報をそのフレーム
によって2つに分かれている画面(2つのCGI)の両方にわたさなくてはだめなんです。
GETを用いるときのQUERY_STRINGに最大何バイトはいるか
わかればGETでの送信でも良いんですけど、
ちょっとPOSTじゃないと心配なんですよね。

無責任官庁 1999/07/13(火) 14:45:19
・単一の画面(フォーム)からCGI処理。その結果をフレームで出力するが
 フレーム内の二つの画面とも最初CGIの結果から出力したい。

と、いう事でいいんですよね。
最初のCGI処理の時に、サーバー上にテンポラリ(一時)ファイルを
作るのはどうでしょう。
恐らくフレームをCGIで出力すると思いますので、
最初のCGIでファイルを作成して・・・

<FRAME SRC="/cgi-bin/hoge.cgi?990713134206.tmp" NAME="frame1">
<FRAME SRC="/cgi-bin/fuga.cgi?990713134206.tmp" NAME="frame2">

なんて感じで、テンポラリファイルの名称を次のCGIに渡すとか・・・
(990713134206.tmpってのがファイル名のつもりね)
ファイル名の付け方や、処理がかぶった時、ファイルの後始末とかでちょっと
悩むかもしれませんが、まあこれならサイズの心配はいらないですし(^_^;)

あまり現実的ではなかったかな・・・?

ABCくん [E-Mail] 1999/07/14(水) 12:04:59
ご返事ありがとうございます。
テンポラリファイルはチラッと考えました。
ご指摘の通りファイルの後始末などいろいろと
考えることが多くなりそうですし違うところで時間がかかっちゃいますよね。
今つくってる物がどのくらいのアクセスがあるものなのか
まだわからないのでその方法はちょっと危険なんです
(某会社のイントラネットで動くシステム)

無責任官庁 1999/07/14(水) 13:58:16
<すみません、ちょっと長文になります>

えっと・・・
私も勉強がてら、考えてみました。
STさんの考えを基本にしてやる方法です。
まず、データを渡す側のCGIですが、以下のようなHTMLを出力します。

<html><head><title></title></head>
<SCRIPT LANGUAGE="JavaScript">
<!--
function datawrite(obj,cgin){
formtag="<form method=post action='/cgi-bin/" + cgin + "' name=form1>"
obj.document.write(formtag);
obj.document.write("<input type=hidden name='a' value='1'>");
obj.document.write("<input type=hidden name='b' value='2'>");
//ここに、渡したいデータの分だけ ↑のように、
//formのinputタグの形式で文を生成する
obj.document.write("</form>");
}
// -->
</SCRIPT>
<FRAMESET COLS="50%,*">
<FRAME src="frame1.html" NAME="A">
<FRAME src="frame2.html" NAME="B">
</FRAMESET>
</html>

そんで、frame1.htmlの内容は、以下の通り

<html><head><title></title></head><body>
<SCRIPT LANGUAGE="JavaScript">
<!--
parent.datawrite(this,'aaa.cgi');
this.document.close();
this.document.form1.submit();
// -->
</SCRIPT>
</body></html>

frame2.htmlは上記内容とほぼ同じで、'aaa.cgi'ってのが違うだけの
ファイルを作っておきます。

これなら、frame1.html,frame2.htmlは固定で置いておけば良いだけですし、
渡したいデータをPOSTで好きなだけ渡せますが。
ちょっと回りくどい方法なのでアレかもしれませんが・・・。
レスポンスも・・・その環境でやってみないコトには分かりません・・・。
(^_^;)

ABCくん [E-Mail] 1999/07/14(水) 18:54:46
[[解決]]
教えていただいた方法で、つくってみたところ・・できました!!!

FRAME作成部分のHTMLにもこのように
JavaScriptを書くことができたんですね。
非常に勉強になりました。

ありがとうございました。

[上に] [前に] [次に]