jQuery.post()如何处理Content-Disposition:attachment?

时间:2012-03-15 10:44:09

标签: php jquery post document attachment

这里有点疯狂。我正在使用jQuery.post进行Ajax调用,如下所示:

  $.post('php/print.php',{data:dS},function(res){...  },"text");

我从print.php返回(作为测试):

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=test.doc");

echo "<html>";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
echo "<body>";
echo "Testing-2-3!";
echo "</body>";
echo "</html>";

根据Firebug,包括标题在内的数据很好。但是如何让浏览器(在本例中为Firefox)提示用户保存附件?

感谢。

2 个答案:

答案 0 :(得分:5)

根本不可能。 AJAX请求永远不会引起用户提示。

但是,您只需返回请求,例如包含URL的JSON或纯文本,然后使用location.href = ...;重定向到它;这将导致您正在寻找的提示。

如果请求总是导致文件下载,您还可以考虑使用常规表单而不是使用AJAX;如果响应触发下载对话框,则前一页仍将保留在浏览器窗口中。

答案 1 :(得分:-1)

为什么不直接链接到print.php

并使用此代码将php输出调用到浏览器

$fp = fopen("php://output", 'w');
header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=test.doc");
$fp = fopen("php://output", 'w');
fwrite($fp,"your content here");
fclose($fp);