jQuery / ASP - 使用cookie上传进度

时间:2012-01-19 21:01:03

标签: javascript jquery asp-classic progress-bar

我想知道我接收上传进度指示的解决方案是否有效,如果有可能,我会以正确的方式进行吗?它不一定非常准确,我只想要一个旋转的动画图标。

1)在上传表格页面上////////

Submit upload form & files to processing page.

2)在处理页面上/////////

For Each file In myFileArray Then
   ' Save the file
   ' Add 1 to a cookie called progressReport
Next

3)在上传表单页面上///////

checkTimer = window.setInterval(function () {
    var cookieContents = $.cookie('progressReport');
    if (cookieContents != "")
    $('#uploadProgress').html(cookieContents + ' files uploaded');
}, 2000);

----更新----

由于以下答案,我无法做到这一点,因为在页面完成处理之前cookie不会被写入 - 这意味着用户在完成之前不会得到任何反馈。没用!

我改变了我的计划。这适合我的应用,可能不适合我。

1)对创建唯一ID的服务器页面和名为“唯一ID”的文件夹进行AJAX调用。完成后,将ID作为响应发回,在上传表单中为隐藏输入添加唯一ID。

2)用户提交文件,检查ID存在于隐藏输入中,然后发布到隐藏的iFrame。提交时,每1-5秒对另一个服务器页面进行一次AJAX调用,检查该文件夹中有多少文件,将数量作为响应发送回来,更新进度面板。

2 个答案:

答案 0 :(得分:1)

它不起作用,因为:

For Each file In myFileArray Then
   ' Save the file
   ' Add 1 to a cookie called progressReport
Next

在完成所有文件之前,不会将cookie写入浏览器。

您需要设计一种方法,从客户端逐个开始上传这些文件。您的处理页面只收到一个文件;递增cookie中的值并完成响应。换句话说,您的处理页面最终被n个文件调用n次。您的javascript代码每2秒钟继续读取cookie并显示上次响应更新的值。

答案 1 :(得分:1)

这是可能的,但使用cookie是一种奇怪的方式。如果进度存储在服务器端,那么您应该只通过ajax请求更新客户端。绝对可以使用cookie,但似乎没必要。如果您希望客户端更新某个请求(例如,已完成第一阶段,然后两阶段,直到它最终完成),那么您应该查看“长轮询”作为替代方案。或某些推送系统。

要上传文件,您可以找到一些显示进度的示例。如果您愿意,HTML5已修改XMLHttpRequest Level 2,以便更轻松地管理上传进度等内容。