2013-02-21 31 views
0

我正在使用John Culviner的(很棒的)jquery.fileDownload插件。它具有下载完成时的回调,但我的文件需要大约30秒才能生成(大量后端处理)。jquery.fileDownload:通知用户进度

我想告诉用户当前的进度。

为原型,我想这一点:

1)(文件下载开始前) - 反复查询的URL每秒($获得(...))。它返回完成%并更新页面上的div(此时为0%)。

2)启动fileDownload脚本(此时,正在检查的服务器端变量1)开始更新,例如,完成2%....完成10%....等

3)理想情况下,虽然文件正在构建,我在1)的ajax调用仍然同时轮询(和更新div),以便用户开始看到一些进展。

4)下载完成。我可以隐藏'进度div',因为它会显示100%。

注意进度div最终会被进度条取代。

问题是,一旦fileDownload开始,1)中的ajax调用开始排队,直到4)之后才实际执行!

我认为fileDownload插件使用一个iframe,我不会想到会阻止我的主页中的ajax调用,但似乎。

希望是有道理的。感谢有关如何处理这个问题的任何建议。

回答

0

我遇到了与ASP.NET MVC Web应用程序相同的问题。 在我的情况下,问题与服务器有关,因为没有两个请求使用同一个会话可以同时运行。该会话在ASP.NET中不是线程安全的。

MVC项目的解决方案是用[SessionState(SessionStateBehavior.ReadOnly)]属性修饰控制器。 要在两个操作之间共享变量,请使用线程安全的Cache而不是会话。

+0

我遇到了与此组件和ASP.NET MVC5相同的问题。我用包含SessionStateAttribute的“进度”动作对控制器进行了装饰,但对进度动作的调用仍然阻止,直到文件下载完成。我是否需要用相同的属性来装饰两个控制器?这可能很艰难。 – 2014-01-30 03:07:39