• ベストアンサー

処理終了後にフレームの更新

現状1ページを「FRAMESET」にて上下2分割しているのですが、CGI終了後上段のフレーム部のみ更新したいです(index.html)。 [処理概要] 上段処理(UP.cgi) ・AA.txtから読み込んだ値をセレクトメニューに反映(cgiにて自動処理) ・セレクトメニューから値(1)を選択(ブラウザより手動) ・テキストボックスに値(2)を入力(ブラウザより手動) ・実行ボタンを押す(LOW.cgiへ) 下段処理(LOW.cgi) ・上段で選択された値(1)を値(2)に変更してAA.txtに反映 ・変更内容を下段部に表示 というような処理に ※LOW.cgi実行後、上段部を更新(UP.cgi実行) というようなことを盛り込みたいです。 そうすることによってLOW.cgiの処理ごに上段セレクトメニューは変更された結果が読み込まれるという寸法です。 (このような説明で理解いただけるでしょうか?) プログラム自体はCGI/Perlですが、 処理内容的にはHTMLかと思いこちらに質問させていただきました。 詳しい方いらっしゃいましたら、ご教授ください。 サーバー・・・HP-UX 開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

  • HTML
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 すいません、私の言い方もわかりにくく。 通常、同じターゲットに投げて、もう一度表示すれば ファイルを読み直して内容が変更されるのですが、 フレームわけして下のターゲットになげてしまっているので そのフォームが表示されている部分は変更できないということを 言いたかったのです。 多分、考えている動作は同じです。 LOW.cgiの変更内容を表示した時に <html> <head> <title>結果</title> <script type="text/javascript"> <!-- function init () { window.top.フレーム名称.location.reload(true); } //--> </script> </head> <body onLoad="init();"> </body> </html> テストしていないのであれですが、こんな感じで書くと 処理を終わってページを表示した際に、initが呼ばれ、 指定した部分の更新を行います。 試してみてください。

kal1119
質問者

お礼

上記を参考にしたところできました。 本当にありがとうございました。。。

その他の回答 (2)

回答No.3

ボケた回答になるかもしれませんが、ちょっと疑問に思ったので念の為・・・。 フレームごと( target="_top")で LOW.cgi を呼び出すのではダメなのでしょうか??? 詳しく言えば、 LOW01.cgi で AA.txt へ反映まで行い吐き出すのはフレームの枠側のファイルとする。 あとは自然とフレームの上段と下段で初期表示と似た結果となると・・・。もし表示させたいデータファイルが本来の初期表示とは違うのなら、別にプログラム(CGI)を用意すれば良いだけ・・・。処理の流れは初期表示と同じなので作成も容易・・・。 LOW.cgi や UP.cgi が他でも使用していていじれないというのなら、共有化して呼び出す形にすればメンテナンスもなんの問題もありませんが・・・。 プログラムとHTML等の係わりなら、プログラム(CGI/Perl)をさわる事を考えた方が楽では??? 尚、CGIは触れられずHTMLは触れられるからHTML側で対処したいとなると、HTMLを吐き出すのがCGIという事でそもそも矛盾しますが・・・。 あと、外に処理を投げていますが、排他や二重送信対策はいかがでしょうか??? (完全にオンラインプログラム開発時の注意事項に気を配らなければいけない程、面倒な状態になっていますが・・・。)

kal1119
質問者

お礼

少し観点が違うようですが ご回答ありがとうございます。 一応無事に処理が行えるようになりましたので。。。 ちなみに > あと、外に処理を投げていますが、排他や二重送信対策はいかがでしょうか??? こちらは大丈夫です。 アドバイスありがとうございました。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 上部からのリクエストを下部のスクリプトに投げてしまっているため、内容がかわらないので 上も更新したいってことでしょうか。 手っ取り早いのは、下部にリクエストを投げ、処理後にJavaScriptで 上部フレーム部分をリロードするようにしてみてはいかがでしょうか。

kal1119
質問者

お礼

早速のご回答ありがとうございます。 > 内容がかわらないので上も更新したいってことでしょうか。 少し違いますね。文章で説明するのが非常に難しいのですが、 実行ボタンを押してCGIでAA.TXT(セレクトメニューの項目)を変更させているにもかかわらず、 上段フレームのセレクトメニューの内容は更新前のままなので連続して処理を行うことができない ということです。 > 上部フレーム部分をリロードするようにしてみてはいかがでしょうか。 そのやり方(記述例など)を教えていただけますか? もしくはそういうサイトをご紹介いただけないでしょうか? 以上、よろしくお願いいたします。

関連するQ&A

  • フレーム間の処理2

    こんにちは! 下でも質問させて頂いたのですが、具体的に行いたい処理を 書かせて頂きます。 今、c.aspがあり、その中身はADOでデータベースを取り込んで処理を したデータ一覧が20行表示されています。それを「前へ」「次へ」 のsubmitボタンで前の20行、次の20行と表示を更新出来るように なっています。 ここで、a.asp、b.aspを作成して、a.aspをフレームで2分割にします。 a.aspの上段フレームにb.asp、下段フレームにc.aspを配置します。 c.aspの中の「前へ」「次へ」のsubmitボタンを上段フレーム に移行します。 で、上段フレームの「前へ」「次へ」のsubmitボタンを押せば 下段フレームの20行が変更するようにしたいのです。 このフレーム間の処理はどのようなプログラムを組めば出来るのでしょうか? ご存知の方、是非ご教授下さい。

  • perlの処理を遅くしたい

    CGI初心者です。わかる方教えてください。 少々古いですがactiveperl apache1.3.12を利用してperlプログラムを自宅のみで使うCGIプログラムをWINDOWS上で起動しています。 処理が長くまた同時に複数の処理をperlで処理します。ブラウザ送信ボタンよりCGIを実行してperl.exeを合計5つぐらい同時に起動します。 タスクマネージャーのプロセスの優先度の設定は実行当初「普通」になっていますが,これを実行当初から「低」にしたいと思っていますが やり方がよくわかりません。CGIの書き方,apacheの設定,ショートカットの書き方でできるんではないかと思っていますが,ご存じの方教えてください。OSはWINXPです。宜しくお願いします。

  • 1つのプログラム内で"html出力"の部分とそれ以外の処理部分の共存

    1つのプログラム内で"html出力"の部分とそれ以外の処理部分の共存 こんにちわ。 ・リロードイベントをキャッチしたhtmlからリクエストをcgiが受信(html出力部分) ・カウンタ値を保存しているtxtファイル(data.txt)から現在の値を読み出す ・+1してファイルにまた値を書き込む ・その値をhtmlにも返して表示させる(html出力部分) といった具合のプログラムを作りたいのですが、html出力をしている部分とそのほかの処理を同じcgiファイルに入れているとうまく動かないみたいです。 以下が問題のファイルの中身です。 (test.cgi) #!/usr/bin/perl open(IN, "../html/2010/data.txt"); my $counter=<IN>; close(IN); $counter++; open(OUT,"> ../html/2010/data.txt"); print (OUT "$counter\n"); close(OUT); print "Content-type: text/html\n"; print "\n"; read(STDIN, my $data, $ENV{'CONTENT_LENGTH'}); print "$counter\n"; ページをリロードして処理を確認するとdata.txt内の値は変わらないまま、それに1を足しただけの値が表示されます。しかしdata.txtの中身が0でサーバのコマンドラインで perl test.cgi といった風に動かしてみると Content-type: text/html 1 といった感じに今度はちゃんとdata.txt内の値もちゃんと書き換えられて出てきます。 html出力部分とdata.txtの書き換え部分は分離させたほうがよいのでしょうか?分離しなければいけない場合は互いのデータの受け渡し方法もご教授お願いします。

    • ベストアンサー
    • CGI
  • セレクトメニューについて

    HTMLでフォームを作っています。 セレクトメニュー(クリックするとメニューが出てきて一つ選ぶやつ)がいくらかあります。 前のセレクトメニューの選ばれたものによって、次のセレクトメニューの選択肢を変更するにはどうすればよいのでしょうか? cgiの実行も可能です。 御願いします。

    • ベストアンサー
    • HTML
  • CGIの処理中に次の処理が出来る?

    perlで書いたCGIの処理時間が非常に長いのです。 処理は数百名に対してメールを配信するもので、テキストで書かれた数百のメールアドレス配列に対してループ文で一人ずつメールを配信しています。これが約4分くらいかかります。 質問は2つあって、 (1)まずこのメール配信の処理を早くする方法はないでしょうか?  配信アドレスは自動的に追加されたり削除されたりするので固定のML  を使う事ができませんので、個別にメールを送る方法を取っていま  す。 (2)メール配信をバックグランドで実行させて、メインのプログラムは  復帰させる、という方法が出来るでしょうか?  今は、メインCGIが画面の表示やメールの配信などほとんどを実行し  ています。  このような場合、メール配信中はそのメインCGIが実行権を握った  状態になる為、他のユーザはこのメインCGIを実行出来ないと思って  いるのですが、間違った認識でしょうか?  もしそうだとすると、早くメインCGIの実行権を他のユーザに明け渡 さなければならないと思うので、メール配信を別CGIで実行させたほ うが良いのかな?と思った次第です。  よろしくご教示下さい。

    • ベストアンサー
    • CGI
  • 正規表現を教えてください。

    YYYYMMDD_aa._aa_bbb.txt とあったとき YYYYMMDDは日付をあらわし, aa._aaはサーバ名をあらわして bbb.txtはファイル名をあらわすとき YYYYMMDD aa._aa bbb 値は変化するものでYYYYMMDD_サーバ名_fail.txtは変わらないとした時 それぞれあらわすperlでの正規表現を教えてください。

  • セレクトメニューセレクトメニューへのジャンプ

    こんにちは。 セレクトメニューの選択項目に応じて、もう1つのセレクトメニューの内容を変更する方法は大体理解したのですが、 さらにもう一つ、+もう一つ・・・とセレクトメニューの項目をリンクさせて変更することは可能でしょうか? 例えば、 セレクトメニュー(1) 選択   ↓ ジャンプ セレクトメニュー(2) 選択   ↓ ジャンプ セレクトメニュー(3) 選択   ↓ ジャンプ セレクトメニュー(4) 選択   ↓ 検索用CGI実行 クリック というように選ばれた各項目ごとに次のセレクトメニューにジャンプして項目の変更を行いたいです。 参考サンプル等、 どなたか情報をお持ちの方がおりましたら、 よろしくお願いいたします。

  • cgiを使ってサーバ上にファイルを作成する方法

    無料のサーバスペースを使用してHPを作っています。 perlを使って自作したcgiをwindowsのコマンドラインで実行すると open(F,">oceco.txt"); print F "oceco\n"; close(F); この記述でファイルが新規作成されるのに、サーバー上のcgiで実行するとファイルが新規作成されません。 しかし、空のoceco.txtをFTPでサーバーに送って属性変更を済ませ、cgiを実行するとoceco.txtの中身が変更されます。 同じサーバでフリーの掲示板cgiを使用していますが、ログファイルを新規作成できています。 そこで質問です。 cgiをつかってサーバ上でファイルを新規作成する方法を教えてください。

    • ベストアンサー
    • Perl
  • 正規表現教えてください。

    正規表現を教えてください。 YYYYMMDD_aa._aa_bbb.txt とあったとき YYYYMMDDは日付をあらわし, aa._aaはサーバ名をあらわして bbb.txtはファイル名をあらわすとき YYYYMMDD aa._aa bbb 値は変化するものでYYYYMMDD_サーバ名_fail.txtは変わらないとした時 それぞれをあらわすperlでの正規表現を教えてください。 まとめてあらわすのではなく、ひとつずつを表す方法でお願いします。

  • for ( … ){}の処理ができません

    いままで正常に動いていた cgi(perl)に次のようなセンテンス for ( $cnt=0 ; $cnt<2 ; $cnt++) { my $before = "snow06b.gif"; #変換前の名前 my $after = "snow06x.gif"; #変換後の名前 rename($before,$after); my $before = "snow06x.gif"; #変換前の名前 my $after = "snow06b.gif"; #変換後の名前 rename($before,$after); } を追加したところ、cgi 全体が動かなくなってしまいました。 for ( … ){  } の中の処理はこの cgi の他の箇所でも行っていて、正常に実行されることが分かっています。中の処理をはずして for ( $cnt=0 ; $cnt<2 ; $cnt++) { } だけにしてもこの cgi の他の処理を実行しなくなります。自分のパソコンの中にある他のperl のプログラムの中のループの処理と見比べてもどこが悪いのか分かりません。何が原因なのかお教え願えれば幸いです。 初歩的な質問で申し訳ありません。

    • ベストアンサー
    • Perl

専門家に質問してみよう