【问题标题】:How do I offer an Ajax POST response to the user as a download?如何以下载的形式向用户提供 Ajax POST 响应?
【发布时间】:2009-04-09 13:54:25
【问题描述】:

我正在尝试在现有的充满帐户信息的页面中包含 vCard 导出功能。

丑陋的方法包括 1,将表单提交到同一页面,对其进行处理并重新呈现整个页面,或者 2,针对页面上的 iframe 的 GET。我真的很想避免这两种情况,但我可能必须使用 #2 来实现目标。

现在我有:

<input type="image" src="/intra/imgs/icons/vcard.png" onclick="$.post('/intra/vcard.php', { id: '992772', type: 'sponsor'});">

从某种意义上说,如果我在 Firebug 中观看 XHR 活动,我会看到请求以正确的响应返回,其中充满了 vCard 格式的数据。但是,它不会提示用户将响应下载为文件,即使发送的卡是:

header('Content-Type: text/x-vcard');
header("Content-Disposition: attachment; filename={$this->name_first}{$this->name_last}.vcf");

是我做错了什么,还是这不可能?

【问题讨论】:

  • 您要发布下载内容吗?就术语而言存在危险的矛盾,我会找到一种将其作为 GET 的方法。
  • 在这种情况下,遵守 REST 远非重要。感谢您的观看。

标签: php jquery download


【解决方案1】:

我很困惑到底是什么问题。为什么不做类似的事情:

<input type="image"
       src="/intra/imgs/icons/vcard.png"
       onclick="window.location='/intra/vcard.php?id=992772&type=sponsor';">

然后在vcard.php 上返回相应的下载标头?当浏览器获取这些内容时,它将停留在同一页面上并提示下载。您必须更改代码以将变量处理为 $_GET 而不是 $_POST 但无论如何您都应该使用 GET。

EDIT 正如 cmets 中所指出的,这样做会更合适:

<a href="/intra/vcard.php?id=992772&type=sponsor"><img src="/intra/imgs/icons/vcard.png"></a>

这样,禁用 javascript 的用户就可以访问它。

【讨论】:

  • 我以为我记得一些类似的行为,但不记得我是如何做到的(5 年前?)。谢谢!
  • 为什么不使用 而不是 onclick?
  • 这是真的。我什至没有考虑。
【解决方案2】:

是的,您无法从 xhr 触发下载。我发现的唯一方法是选项 #2,使用 iframe。

也许一个 jquery 插件(我假设你正在使用 jquery)只是为了这个目的而过度杀伤,但this 可能对你有用。

【讨论】:

    【解决方案3】:

    检查文件名´{$this->name_first}{$this->name_last}.vcf´) 是否有效以及firebug 中的http 响应! (标签网络,点击响应)。

    那里的内容正确吗?
    内容长度是否正确? http-status 呢?

    【讨论】:

      【解决方案4】:

      在发布期间生成您的内容,然后重定向到该内容。

      【讨论】:

        猜你喜欢
        • 2021-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 2021-09-08
        • 2021-04-03
        相关资源
        最近更新 更多