13

我有一个用户在线填写的网络表单。当他们按下提交时,它将开始为他们下载文件。

目前,我处理表单提交并为用户生成一个合适的文件并使用合适的标题将其关闭。例如...

header('Content-type: "application/octet-stream"');
header('Content-Disposition: attachment; filename="yourfile.txt"');
header("Content-Transfer-Encoding: binary");

但是,由于这会立即开始下载,因此原始表单会被浏览器留在屏幕上。

一旦下载完成(或在下载开始之前),我真的很想去一些“谢谢”屏幕。我知道这是可能的,因为您访问的几乎每个下载站点都会这样做(通常会在下载开始之前给您灌满广告)。

那么,如何显示一秒钟后开始下载的“谢谢”屏幕?

提出的任何解决方案将如何影响后退按钮的行为,因为我不希望在不重新填写表单的情况下再次下载文件?

我在服务器上使用 PHP,并且可以依赖客户端上可用的 Javascript(和 jQuery)。

谢谢你。

4

3 回答 3

24

您可以将表格发送到Thank you document,并在那里对文件下载进行META 刷新:

<meta http-equiv="refresh" content="3;url=download.php">
<p>Thank you! The download will start in 3 seconds. If not, use this link to download the <a href="download.php">file</a></p>
于 2009-10-02T12:13:40.720 回答
3

添加第二个页面,上面写着“谢谢,您的下载将在几秒钟内开始”并使用 javascript 触发下载:

$(document).ready(function(){
  window.setTimeout(function(){
    window.location = 'http://yourdownloadhost.com/file.zip';
  }, 1500);
});

或使用元重定向。

于 2009-10-02T12:14:45.960 回答
0

您可以在页面中插入隐藏的 iframe,然后将表单提交到此 iframe。

于 2009-10-02T14:07:25.137 回答