我们使用 ajax 调用将数据发送到服务器。服务器端编程是使用 Perl 将数据保存到数据库中完成的。
由于我们有很大的文件,我们希望显示一个进度条,告诉用户发布到服务器的百分比数据。如何使用 Ajax 和 Perl 实现这一点?
提前致谢。
我们使用 ajax 调用将数据发送到服务器。服务器端编程是使用 Perl 将数据保存到数据库中完成的。
由于我们有很大的文件,我们希望显示一个进度条,告诉用户发布到服务器的百分比数据。如何使用 Ajax 和 Perl 实现这一点?
提前致谢。
在高层次上,我可能会通过在display: block
页面上放置一个具有彩色背景(或者可能是图像)且宽度为零的空元素来做到这一点,然后定期向服务器运行 AJAX 回调以获取进度更新并增加元素的相应的宽度。(我怀疑 COMET 会是一种更有效的方式来处理这类事情,因为我读过的描述表明它是 AJAX 的服务器推送版本,所以它会消除轮询开销,但我没有真的调查了彗星,所以我可能会误解它。)
在低层次上,实现这一点的实际代码很大程度上取决于您如何执行 AJAX。您使用的是JQuery、CGI::Ajax、不同的模块(CPAN 或其他),还是您自己的手动 AJAX 处理代码?
有几个预先编写的脚本可以实现这一点:
使用 Comet:推送更新页面中进度条元素的定期 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');
}