2009-06-28 7 views
2

サーバーにデータを送信するためにajax呼び出しを使用します。サーバー側のプログラミングはPerlを使用してデータをデータベースに保存します。AjaxとPerlでWebプログレスバーを作成するにはどうすればよいですか?

サイズが大きいファイルがあるため、サーバーに送信されたデータの割合をユーザーに知らせるプログレスバーを表示します。これはAjaxとPerlを使ってどのように実現できますか?

ありがとうございました。ハイレベルでは

答えて

3

、私はゼロの幅をページ上で色の背景(または多分画像)と、空display: block素子を入れて、これを行う可能性が高いだろうし、進捗状況を取得するためにサーバに定期的にAJAXコールバックを実行しますそれに応じてエレメントの幅を更新します。 (私は私が読んだ説明はAJAXのそのサーバプッシュバージョンことを示唆しているようCOMETは、この種のものを処理するため、より効率的な方法だろうと思われるので、ポーリングのオーバーヘッドを排除するだろうが、私は本当に持っていません私はそれを誤解することができるので、COMETに見えた。)

低レベルでは、これを実装する実際のコードは、あなたのAJAXをやっているかに大きく依存します。あなたはJQueryCGI::Ajax、別のモジュール(CPANまたはその他)、またはあなた自身の手巻きAJAX処理コードを使用していますか?

2

使用彗星:ページにプログレスバーの要素を更新する定期的なJavaScriptタグをプッシュします。また、ブラウザがページを更新するために余分な空白を送る必要があります(PerlでPHPのflush()に相当するものを見つける)。例えば

、アップロードされたデータのすべての10%、

progressBar(percentage)は、プログレスバーの幅(私はあなたがページ上のjQueryを持っていると仮定している)を更新する機能です
<script type="text/javascript">progressBar(10)</script> 
<script type="text/javascript">progressBar(20)</script> 
... 
<script type="text/javascript">progressBar(100)</script> 

押す:

function progressBar(percentage) { 
    $('#progressbardiv').css('width', percentage + 'px'); 
} 
+1

をバッファリングされた出力を強制的に送信するには、改行(\ n)を出力してください。ラインバッファリングをオフにするには、いくつかのオプションがあります:http://www.rocketaware.com/perl/perlfaq5/How_do_I_flush_unbuffer_a_fileha.htm –

関連する問題