ajax调用后强制下载

时间:2011-10-11 05:39:31

标签: php javascript ajax download

我有一个等待ajax调用的PHP脚本

www.mydomain.com/file.php

ajax调用包含一些变量,file.php将用于生成一些csv结果,

用户是否可以下载file.php生成的csv内容而无需将其保存在服务器上的某个位置?

我也不想将用户重定向到任何其他页面,我希望他们单击​​按钮然后查看下载对话框,让他们下载csv文件。

3 个答案:

答案 0 :(得分:3)

当然,在输出任何内容之前的PHP文件中,将内容类型设置为浏览器将下载的内容:

header("Content-Type: application/octet-stream");

此外,这也是一个很好的做法(并允许您建议文件名):

header("Content-Disposition: attachment; filename=somefile.csv;");

根据浏览器的不同,有时只需要后者,但我通常会同时使用两者来确保。

答案 1 :(得分:2)

将元素放在表单中并提交它们似乎只是hacky,我觉得使用它并不舒服。

当你使用这些类型的东西我认为你有点冒险时,下一版本的浏览器可能根本不支持它们。

此外我将复杂的数组作为我的ajax调用服务器中的选项传递,并且将它们全部转换为html表单并不容易,除非我在隐藏元素中序列化数组并在服务器端反序列化它,但是这太复杂了。

我所做的是,当进行ajax调用时,服务器将输出存储在会话中,然后它返回该值的唯一键,服务器上的另一个页面将在给出该键时简单地回显输出作为输入,

因此,用户点击某些内容,然后进行ajax调用,然后服务器将其存储在会话中,然后用户单击下载链接,然后服务器将删除该会话。

它可能不是最完美的解决方案,因为用户必须点击两次,但它似乎对我来说更加标准。

答案 2 :(得分:1)

@ user893730-为什么要将元素放在表单中并将其提交为“hacky?”此外,我不明白为什么序列化和反序列化数组数据是“复杂的” - 有十亿个库可以支持这种事情。