6

在我们当前的项目中,我们提供了一个 PDF 下载,用户可以通过他提交的 HTML 表单对其进行自定义。动态生成 PDF 需要几秒钟,我想将其可视化,例如通过禁用提交按钮直到下载开始。不幸的是,我找不到检测下载何时开始的方法*。所以我不知道何时重新启用提交按钮。

我已经尝试将 IFrame 指定为我的 HTML 表单的目标,希望onload能够触发该事件。然而,事实并非如此——可能是因为 PDF 是使用“ Content-disposition: attachment”标头发送的,并且它实际上并未加载到 IFrame 中。

我现在能想到的唯一解决方案是将 PDF 生成到服务器上的临时文件中,我想避免这种情况。

*)让我澄清一下:我不需要知道下载是否完成,或者即使它真的开始了。我想检测浏览器询问用户是打开还是保存文件的点。我猜这发生在浏览器收到 HTTP 标头时。

4

3 回答 3

4

如果我是你,我会用信息对服务器进行 AJAX 调用,生成文件,然后将文件名/id/whatever 返回到 javascript,然后使 window.location 类似于 download.php?id=x (但文件已经生成,所以它只是设置标题并将其读出)此时您可以重新启用提交。

于 2009-01-07T17:22:43.063 回答
2

您想要的是能够检测下载文件的大小何时从 0 变为正值。据我所知,使用 javascript 是不可能做到这一点的——您需要一个可以访问客户端文件系统的插件。

推荐的解决方法:每次下载创建一个会话。让客户端轮询服务器关于下载的状态。这可能是“不存在”、“未开始”、“开始”、“完成”。您需要一些服务器端的工作来保持和更新下载状态以及 AJAX 框架。

于 2009-01-07T14:18:43.153 回答
0

最简单的解决方案是(慷慨地)估计时间并这样做。这是一个 hack,但它提供了预期的效果。另一种选择可能是使用 Ajax 提交带有回调的表单,以提交表单并让生成器将详细信息返回到调用页面。http://www.jquery.com/可能是该选项的一个很好的起点。

于 2009-01-07T14:19:56.927 回答