1

我有一个在文件中提取 zip 文件的任务:Update.asp How can I update jquery progress bar after task started on index.asp.

我在 index.asp 找到了使用 2 ajax 调用的解决方案。一个用于启动任务,update.asp另一个用于session("progress_status")在每个提取文件完成时获取此 Session 更改的内容update.asp

<%
session("progress_status") = 0
'file 1 extracted
session("progress_status") = 50
'file 2 extracted
session("progress_status") = 100
%>

问题是当第一个 ajax 调用开始时,第二个 ajax 调用保持挂起直到第一个调用完成。

我的 ajax 调用

4

1 回答 1

0

您遇到的问题是 ASP 处理器一次只会为特定会话处理一个脚本。因此,您对尝试获取进度的 asp 脚本的调用将在执行提取的 asp 脚本后面排队。

这就是我建议你这样做的方式:假装它。您向执行提取的页面发出 ajax 请求。在提取时,您有一个使用计时器的纯 javascript 驱动的进度条。给它一些放松,这样一开始看起来进展很快,但随后呈指数级放缓。当 ajax 请求完成时,您可以在移除进度条之前将其简要显示为已完成。

如果您可以获取 zip 的原始大小,则可以使用该图形来改善伪造的进度条与现实之间的匹配。如果此类提取发生得相当频繁,您可以通过记录提取各种 zip 文件所需时间的一些统计数据来进一步了解这一点,以获得一些风味时间与字节的比率。

最终,您的用户想要一种温暖而模糊的感觉,即某事正在发生,而上述实现了这一点。

于 2012-06-20T19:43:10.713 回答