- 締切済み
内部処理中にNow Loadingみたいな文字を表示させたい
お世話になります。 PERLにて以下のことをしたいと思っているのですが、お知恵をお貸し頂けるでしょうか。 「内部処理中にNow Loadingみたいなページを表示させたいのですが、どうもうまくいかない。」 以下のような感じです。 =============================================== print "Content-type: text/html\n\n"; print << "EOF"; <html> <head> ・ ・ ・ </head> <body> ・ ・ (<body>~</body>の間にjsでNow Loadingを表示するよう設定) EOF &sub #←内部処理用サブルーチン #処理後html文を吐くもの print << "EOF"; </body> </html> EOF =============================================== こんな感じで書いて、jsを使ってNow Loadingを表示するようにしようと思ったのですが、これだと、&subが先に処理された上でNow Loadingと表示されてしまうようで、意味のないものになってしまいます。 そこでヘッダー部分(最初のヒアドキュメント)部分までを先に表示した上で&subが動くようにし、それが完了したら最後のフッター部分を表示するようにしたいのですが、どのような方法があるでしょうか? 非常に不明な文で申し訳ないのですが、アドバイス頂ければ幸いです。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taseki
- ベストアンサー率66% (155/233)
アイデアはなかなかいいですが、ANo.1の方がおっしゃるようにprintの実行とブラウザに返されるタイミングを厳密に制御することは難しいです。 仮にできたとしても、ブラウザからみれば「データの続きがなかなか来ない」と見なされタイムアウトになる可能性もある、という致命的な問題もあります。 ANo.1の方が紹介されている方法の他に、NNならサーバープッシュという技術もありますが、いまどきはあまり一般的じゃないような気がします。 あとは、これが良いかは別として、逆にクライアントプルで実現できなくはないです。 スクリプトが、まだ処理中(待たせる)なら ------------ <META HTTP-EQUIV="REFRESH" CONTENT="10~ … Now Loading… ------------ というようなHTMLを吐き出し、 処理が完了したら ------------ 完了 ------------ などと、その結果を表示、というものです。つまり○秒ごとに完了したかどうか聞きに行く、という考えです。 ちなみに細かいことですがLoadingというと「読み込み中」という意味になりませんか?Process is executing...とかかな?
- hikomin
- ベストアンサー率63% (40/63)
CGIでは、基本的に処理を全て終えた後に、クライアントにサーバからのレスポンスが返ります。printした時点で出力されているのではありません。 最近流行の技法はAjaxになるかと思います。とりあえずNow Loadingと書かれた出力を表示し、ページ内からJavaScriptのXMLHttpRequestを用いてプログラムにアクセス、レスポンスが得られたらJavaScriptでデータを差し替えるというものです。 ひとまず調べてみることをお勧めします。
お礼
お礼が遅くなり申し訳ありません。 なるほど。ブラウザ出力は最後になってしまうんですね。 Ajaxというのは初耳ですので、少し調べてみます。 ご回答ありがとうございました。
お礼
こちらもお礼が遅れ申し訳ありません。 なるほど、そういう方法もありかもです。 一度試してみます。 ご回答ありがとうございました。