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

问题描述:

这里略显疯狂。jQuery.post()如何处理Content-Disposition:attachment?

$.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>"; 

的数据通过细根据未来我如下制备使用jQuery.post调用Ajax Firebug,包括标题。但是,如何获取浏览器(在这种情况下,Firefox)提示用户保存附件?

谢谢。

+0

你的内容类型不会出现在您的内容相匹配... – Quentin 2012-03-15 10:59:04

这根本不可能。 AJAX请求永远不会导致用户提示。

但是,您可以简单地使请求返回例如包含URL的JSON或明文,然后使用location.href = ...;重定向到它;这将导致你正在寻找的提示。

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

+0

OK,所以难怪我会疯狂:)但我如何获得返回数据以包含URL?我的新版本网站是直接的HTML和AJAX,PHP只是发送JSON数据来注入,而不是HTML本身。旧版本的PHP页面呼应HTML表单,但URL是blahblah.php,因此您不必在HTML中包含URL。我只是不知道如何将URL包含在AJAX返回数据中! (请谅解无知。) – Nick 2012-03-15 10:54:35

+0

其实,我对它的看法越多,常规形式的想法可能会奏效。 (尽管我仍然对前面评论中的问题的答案非常感兴趣!)感谢您的帮助。 – Nick 2012-03-15 11:01:29

为什么你不直接链接到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);