2009-06-28 23 views
2

我們使用ajax調用來將數據發送到服務器。服務器端編程使用Perl將數據保存到數據庫中。如何在Ajax和Perl中創建Web進度條?

由於我們有大小很大的文件,我們想要顯示一個進度條,它告訴用戶發佈到服務器的百分比數據。這怎麼能通過Ajax和Perl來實現?

在此先感謝。

回答

3

在高層次上,我可能會這樣做,在頁面上放置一個帶有彩色背景(或者圖像)的空display: block元素,寬度爲零,然後定期向服務器運行AJAX回調以獲取進度相應地更新並增加元素的寬度。 (我懷疑COMET會是一種更有效的方式來處理這種事情,因爲我讀過的描述表明它是一個服務器推送版本的AJAX,所以它可以消除輪詢開銷,但我並沒有真正看着COMET,所以我可能會誤解它。)

在低層次上,實現這個的實際代碼在很大程度上取決於你如何做AJAX。您是否使用JQuery,CGI::Ajax,一個不同的模塊(CPAN或其他)或您自己的手動滾動的AJAX處理代碼?

2

使用彗星:推定期Javascript代碼,在頁面更新進度條元素。您還需要發送額外的空格以便瀏覽器更新頁面(在Perl中查找相當於PHP的flush())。

例如,上傳數據,每10%,推

<script type="text/javascript">progressBar(10)</script> 
<script type="text/javascript">progressBar(20)</script> 
... 
<script type="text/javascript">progressBar(100)</script> 

其中progressBar(percentage)是更新進度條寬度的函數(我假設你擁有jQuery的頁面上):

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

要強制發送緩衝輸出,只需打印換行符(\ n)。要關閉線路緩衝,有幾個選項:http://www.rocketaware.com/perl/perlfaq5/How_do_I_flush_unbuffer_a_fileha.htm – 2009-06-28 17:52:32