【问题标题】:PHP File Download using POST data via jQuery AJAX通过 jQuery AJAX 使用 POST 数据下载 PHP 文件
【发布时间】:2010-08-31 21:55:23
【问题描述】:

所以我知道有很多 similar 帖子,但我认为这足以证明自己的问题:

我正在用 PHP 和 jQuery 构建一个 XLS 导出器。我正在尝试使用 jQuery 发布一个数组(我认为它与 GET 查询字符串相比会太长),并使用它在我的服务器上生成一个 XLS 文件,然后用户可以下载该文件。

我过去曾使用隐藏的 iframe 来完成此操作,但由于它们只是重定向到一个 url,这需要我使用 GET,这让我很紧张。

然后我的问题是:如果这些文件是由多个用户动态生成的,我如何将这些文件存储在我的服务器上并链接到它们?隐藏的 iframe 是否会链接到一个单独的 PHP 脚本,该脚本根据会话 ID 或类似的东西定位他们的文件?

在此先感谢您就我肯定会一直被问到的问题提供任何指导 :)

【问题讨论】:

    标签: php jquery ajax iframe download


    【解决方案1】:

    可以发布到隐藏的 iframe。因此,您无需担心查询字符串的长度;您将发布生成 XLS 文件的键/值对,然后将文件强制下载到浏览器。

    <form method="post" action="/download/xls" target="download_xls"> 
      <fieldset>
        <label>Key 1:</label>
        <input type="text" name="key_1" />
      </fieldset>
    
      <fieldset>
        <label>Key 2:</label>
        <input type="text" name="key_2" />
      </fieldset>
    
        <fieldset>
                <input type="submit" value="Submit" /> 
        </fieldset> 
    </form>
    
    <iframe id="download_xls" name="download_xls" width="0" height="0" scrolling="no" frameborder="0"></iframe>
    

    更新 一个快速的谷歌搜索出现了这篇文章:http://particletree.com/notebook/ajax-file-download-or-not/

    基本上,建议是将您的表单发布到当前页面并以文件下载作为响应。这种替代方案可能对您来说已经足够了。

    【讨论】:

    • 非常酷的想法,但不幸的是,目标属性在表单元素中已被弃用,所以我不知道这是否是一个安全的解决方案。
    • 令人着迷。我现在就去试一试……如果可行,我会接受你的回答:)
    • 你是对的。它在 HTML 4.1 和 XHTML 1.0 中已弃用。但是,它在 XHTML 1.0 Transitional 中有效,并且仍然为大多数主流浏览器所支持。 w3schools.com/TAGS/att_form_target.asp
    • 难以置信!!!!!!谁能想到会这么简单!非常感谢对此的伟大研究。我所要做的就是创建一个表单,更改其输入的值并使用 jquery 提交!
    • 是的,只是几个月后的简要总结......表单上不需要目标属性,您可以只使用 action 属性!
    【解决方案2】:

    这看起来应该很简单,但这完全取决于您将生成的 XLS 文件放在哪里。如果您打算对帖子的响应应该是“保存文件”对话框 - 即文件本身 - 那么您所要做的就是确保“Content-Disposition”标题设置为“附件”,然后将文件内容流出来。

    如果您要生成文件并保留它,那么您将不得不将它存储在带有标识符的某个地方。在这种情况下,您只需使用具有“下载”链接的普通页面进行响应,该链接包含文件标识符。这可以触发 GET 或 POST,并且服务器将响应 that 就像我上面描述的那样。

    在我看来,隐藏的&lt;iframe&gt; 并没有真正考虑到这一点。

    【讨论】:

    • 非常感谢您的回复。理想情况下,我不会保留它们,而只是将用户链接到“保存文件”对话框。但是,如果我这样做,我必须首先从他们的客户端发布数据并从该数据生成文件,然后将它们链接回它......这似乎会迫使我将它保留在服务器上生成。循环逻辑,我知道 :)
    猜你喜欢
    • 2012-01-11
    • 1970-01-01
    • 2011-04-05
    • 2011-10-03
    • 2023-03-19
    • 2012-11-11
    • 2011-03-30
    相关资源
    最近更新 更多