2009-06-28 19 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