我有一个文件download.php
,我通过帖子提供数据,然后通过设置标题
header('Content-Type: application/svg+xml');
header("Content-Disposition: attachment; filename=\"myfilename\"");
现在,问题是如何启动下载。我的第一次尝试是将数据放入表单并通过帖子
提交<form id="svgform" method="post" action="download.php" style="display: none;">
...
</form>
通常,这很好用。它不会更改download.php的位置,只会启动下载。不幸的是,这个方法似乎有一个警告(在极少数情况下)php请求生成错误(无论出于何种原因),页面被更改。我想不惜一切代价避免页面更改(因为未保存的数据可能会丢失)。它还有一些其他奇怪的副作用[1]。
所以,接下来我尝试通过
在新标签中启动下载<form id="svgform" method="post" target="_blank" action="download.php" style="display: none;">
...
</form>
这会导致在下载开始之前出现一个丑陋的白页。更糟糕的是,在IE 11中,白页没有关闭,下载对话框落在上一页上,因此用户没有立即看到它。
所以,我想知道最好的方法是什么。可以通过AJAX更好地实现下载吗?
[1]由于某种原因,Firefox之前打开检查器时无法生成html检查器数据。这是一种了解我的意思的方法。检查Firefox中的某些元素并使检查器保持打开状态。现在,转到通过上述方法(或类似方法)下载数据的页面,例如http://download.cnet.com/CCleaner/3001-18512_4-10315544.html。检查员变空,不再检查任何元素。此外,我的一些脚本在IE 11中停止正常工作。我不确定为什么它可能与Firefox中发生的事情有关。
答案 0 :(得分:1)
由于您不希望在发布表单时更改网址但仍希望开始下载,因此您可以将表单发布为iframe。
<form target="my-iframe-id" method="post" ... >
和iframe:
<iframe id="my-iframe-id" ... ></iframe>
您可以将iframe设置为display: none;
,这样就不会显示。