【问题标题】:How does jQuery.post() deal with Content-Disposition: attachment?jQuery.post() 如何处理 Content-Disposition: 附件?
【发布时间】:2012-03-15 10:44:08
【问题描述】:

这里有点疯狂。我正在使用 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)提示用户保存附件?

谢谢。

【问题讨论】:

  • 您的内容类型似乎与您的内容不匹配……

标签: php jquery post document attachment


【解决方案1】:

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

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

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

【讨论】:

  • 好的,难怪我快疯了 :) 但是如何让返回数据包含 URL?我的新版本网站是直接的 HTML 和 AJAX,PHP 只是发送 JSON 数据来注入,而不是 HTML 本身。旧版本的 PHP 页面与 HTML 表单相呼应,但 URL 是 blahblah.php,因此您也不必在 HTML 中包含 URL。我只是不知道如何在 AJAX 返回数据中包含 URL! (请原谅我的无知。)
  • 其实我想得越多,正则形式的想法可能会奏效。 (不过,我仍然对上一条评论中问题的答案非常感兴趣!)感谢您的帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2017-08-08
    相关资源
    最近更新 更多