通过AJAX下载CSV文件

5

您能使用AJAX从Web应用程序下载生成的CSV文件吗?如果可以,是否有任何参考资料可以指导我?

编辑:抱歉,我应该提到我正在使用Prototype的Ajax.Request,并且我在Firebug的响应工具中查看了生成的CSV是响应,我只需要在Ajax.Request生成后弹出保存文件选项。

4个回答

4
这是Ajax请求的已知限制,您需要使用JS,例如:
window.location='download-csv.rb';

除了使用Ajax请求之外,另一种方法是更改隐藏Iframe的位置,但这也有其优缺点。

无论您发送什么HTTP标头,您都永远无法使Ajax请求显示“文件保存”对话框。


1
鉴于您最新的编辑,要使您的CSV文件触发文件下载(而不是在浏览器中呈现),无需使用Ajax。
相反,解决方案是在请求CSV文件时,让您的后端系统添加此HTTP标头:
Content-disposition: attachment; filename=<your_filename.csv>;

你的实现取决于你使用的后端系统。如果你正在使用Rails(正如你的用户名所示),这是一个开始:

filename = 'your_filename.csv'
headers['Content-Type'] = 'text/plain'
headers['Content-Disposition'] = "attachment; filename=\"#{filename}\""
render :layout => false

我们正在使用AJAX来在生成CSV期间隐藏链接,不使用AJAX下载文件不是问题,并且应用程序已经在做这件事,我们需要隐藏链接以防止用户点击链接超过一次。 - nitecoder
尝试使用$('#link').click(function(){$(this).hide()}); - SeanJA
显然应该是$(this).remove(); - SeanJA

0

下载不是问题;您可以通过XmlHttpRequest下载任何数据。困难的部分是解析它。有几种解析方法,从正则表达式到字符串索引。


0
你可以使用“AJAX”来下载任何东西。有些人会说,在这种情况下,你不应该称其为 AJAX,因为该术语严格用于下载 XML。但实际上,它只是一种在不重新加载页面的情况下将数据传输到客户端的机制。如果你要加载 HTML,则称之为 AHAH;对于 CSV,我猜你会称其为 AHAC 或 AJAC?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接