プロが教えるわが家の防犯対策術!

現在作成中のPerlCGIプログラムを実際に実行すると、かなりのレコード件数の処理をおこなうので、処理終了までの時間がかかると考えられます。
その間ユーザーの画面に、「現在処理中しばらくお待ちください。」という表示だけでは、「おい!本当に動いてるのかよ」と不安にさせることになりますので、1レコードの処理が終了するごとに「1件目の処理が終了しました。」「2件目の処理が終了しました。」・・・というように表示させたいのです。
よくWebページで処理を依頼すると、「現在処理中」とかで、レベルメーターが伸びていくのとかありますが、そんな感じです。
どのようなコードを書けば、レコードの処理ごとにユーザー側のHTMLを更新することが出来るのでしょう。
コーディング例または、参考URLなど教えていただけたら助かります。

A 回答 (4件)

私も以前似たようなことをやったことがあります。


参考URLから下の方を読んでみてください。
(「サーバによるタイムアウトを回避」なんかはそのまま使えると思う)

ただ、レベルメータはJavaScriptで実装した方がいいかもしれません。
(できんことはないでしょうが、デザイン的に結構制限されると思う)

参考URL:http://www.bioinfo.jp/tips.html#timeout
    • good
    • 0
この回答へのお礼

これはかなり参考になりました。
ありがとうございます。

お礼日時:2005/06/28 16:28

そうとう以前、標準時間の表示CGI出力で


上から順番に文字(時刻)が出てくるのがありました
これはサーバと同期しているようで
当時どんな仕組みなのか調べた覚えがあります(今では完全に忘れてます)
コネクションを開いたままで動作(HTMLの追記)していたようでしたが・・
http://www2.nict.go.jp/pub/jst/index-J.html
CGIの方は現在はやっていないようですので 応用できると思ったのですけど検証できませんね


非同期なら#2の方の言うとおりJavaScriptでごまかすしかないと思います
http://allabout.co.jp/career/javascript/closeup/ …

参考URL:http://allabout.co.jp/career/javascript/closeup/ …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/28 16:27

HTTPプロトコルはクライアントがサーバにリクエストして、サーバがそれに答えることしかできません。


サーバ側から定期的にクライアント側に情報を送ることはできないのです。
javascriptを使ってクライアント側が定期的にサーバにアクセスするようにするしか手はないでしょう。

なお、仰っているようなレベルメータですが、それはダウンロードが何%終わったとかを示すものではないですか?その場合はあくまで1回のやり取りですよね。そうでない例はHTTPプロトコルの性質上ありえないと思います。
    • good
    • 0
この回答へのお礼

>サーバ側から定期的にクライアント側に情報を送ることはできないのです。

そうですよね。

>javascriptを使ってクライアント側が定期的にサーバにアクセスするようにするしか手はないでしょう。

それってどんなjavascriptのコードですか?

>それはダウンロードが何%終わったとかを示すものではないですか?

あっ、それは違うというのは分かってます。
例えばASPでLinkShareが個人の報酬集計の際に実行するすると、集計中に■が増えていって、集計後が表示されるみたいな感じです。

お礼日時:2005/06/26 22:41

深く考えずに定期的に ■ でも出力すればいいのでは。

    • good
    • 0
この回答へのお礼

それって、CGI側のループ処理を開始する前に、「実行中です」というのと、■を一定時間ごとに増やしていくというJavaScriptを組み込んだHTMLをクライアントに送る、ということですか?
それもありだとは思うんですけど・・・
えーっと、処理が終了した時に、終了しました。というHTMLをどうやってクライアントに送るんですか?

お礼日時:2005/06/26 22:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!