javascript - 在javascript中等待文件下载时的进度/忙碌指示器?

标签 javascript html

情况是这样的: 在网络应用程序中,用户选择一些选项,提交表单,PDF 文件在服务器端动态生成并提供下载。

问题: PDF 文件的生成需要很长时间(最多 1 分钟)。一些用户认为没有任何事情发生,并不断点击提交按钮,一次又一次地增加服务器负载并进一步降低速度。

我想添加一些繁忙的指示器,它会显示动画图片和消息,如“请稍候,正在生成您的文件”,这似乎很容易做到。

但是:当文件准备好并弹出“文件下载”对话框时,如何隐藏这个指示器?否则,即使用户下载了文件,该消息仍会保留在屏幕上!

似乎是非常基本的要求,但我完全被卡住了。感谢您的任何建议!

最佳答案

我不得不为花费更长时间的事情(转换视频格式)做这件事。这对您来说似乎有点过分,但确实有效。

  1. 将您的 PDF 代码移出进程。
  2. 当一项工作开始时,创建一个唯一的工作 ID 并将其保存到 session 中。将此 ID 告诉 PDF 创建者。
  3. 让它向服务器写入一个状态文件(命名为作业 ID),以便它写入“0% 完成”并每隔几秒更新一次(这部分取决于您能够在您的流程中有一个进度指标... 如果没有,那么这将不起作用)
  4. 使用 JS 将该文件拉下来。您可以向用户显示进度。
  5. 当进度等于“100% 完成”时,将它们推送到 PDF 的位置。如果您也将此命名为作业 ID,可能会有所帮助。*

*我们有另一个下载脚本,使用内容配置 header 将其重命名为一个好听的名字(基于原始视频文件名),但这完全取决于您!

编辑:我应该补充一点,等待页面是点击提交的结果。这是一个新的页面加载,但没有理由不能在整个过程中使用 AJAX,就像其他人所说的那样,只需确保在第一次点击时禁用提交按钮以阻止用户继续点击它。

关于javascript - 在javascript中等待文件下载时的进度/忙碌指示器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/868591/

相关文章:

javascript - 使用 Jquery 根据输入(搜索栏)值显示/隐藏 img 元素

javascript - 事件处理程序的第一个参数

javascript - javascript 表单中的目标 ="_blank"

javascript - 内容="IE=7; IE=9"和内容="IE=7, IE=9"有什么区别

javascript - 属性节点和element.attributes

javascript - DataTable 导致 javascript 停止执行 - 控制台中没有错误

javascript - 更改图像源和不透明度 jquery 问题

javascript - 如何捕获 :after content in IE8?

javascript - 绑定(bind)滚动到点击事件

javascript - 套接字未定义,如果未定义则发送不发送