情况是这样的: 在网络应用程序中,用户选择一些选项,提交表单,PDF 文件在服务器端动态生成并提供下载。
问题: PDF 文件的生成需要很长时间(最多 1 分钟)。一些用户认为没有任何事情发生,并不断点击提交按钮,一次又一次地增加服务器负载并进一步降低速度。
我想添加一些繁忙的指示器,它会显示动画图片和消息,如“请稍候,正在生成您的文件”,这似乎很容易做到。
但是:当文件准备好并弹出“文件下载”对话框时,如何隐藏这个指示器?否则,即使用户下载了文件,该消息仍会保留在屏幕上!
似乎是非常基本的要求,但我完全被卡住了。感谢您的任何建议!
最佳答案
我不得不为花费更长时间的事情(转换视频格式)做这件事。这对您来说似乎有点过分,但确实有效。
- 将您的 PDF 代码移出进程。
- 当一项工作开始时,创建一个唯一的工作 ID 并将其保存到 session 中。将此 ID 告诉 PDF 创建者。
- 让它向服务器写入一个状态文件(命名为作业 ID),以便它写入“0% 完成”并每隔几秒更新一次(这部分取决于您能够在您的流程中有一个进度指标... 如果没有,那么这将不起作用)
- 使用 JS 将该文件拉下来。您可以向用户显示进度。
- 当进度等于“100% 完成”时,将它们推送到 PDF 的位置。如果您也将此命名为作业 ID,可能会有所帮助。*
*我们有另一个下载脚本,使用内容配置 header 将其重命名为一个好听的名字(基于原始视频文件名),但这完全取决于您!
编辑:我应该补充一点,等待页面是点击提交的结果。这是一个新的页面加载,但没有理由不能在整个过程中使用 AJAX,就像其他人所说的那样,只需确保在第一次点击时禁用提交按钮以阻止用户继续点击它。
关于javascript - 在javascript中等待文件下载时的进度/忙碌指示器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/868591/