如何将Ajax响应作为可下载文件发送到web浏览器客户端

How can an Ajax response be sent to the web browser client as a downloadable file?

本文关键字:文件 web 客户端 浏览器 下载 Ajax 响应      更新时间:2023-09-26

我使用MVC 3。我在服务器上的Action Method中创建了一个csv文件(称为GetCSV())。它是一个[HttpPost]动作方法。我要做的是把这个csv文件作为可下载文件直接发送到网络浏览器。我使用window.open()来工作,然而,这是一个本质上的GET方法,我需要一些利用POST的东西,因为我需要将很多参数传递给它。理想情况下,我希望使用Ajax,因为使用这种方法可以轻松地将大量参数传递回服务器。关于如何使用Ajax调用将参数传递给服务器,然后以某种方式将响应打开为可下载文件,有什么想法吗?我很感激任何建议!

我的解决方案是使用微软的MVC 3 Ajax表单而不是JQuery的Ajax。几个月前,我偶然发现,如果你没有为MVC Ajax表单指定一个"成功"函数,它只是将文件发送到web客户端供下载。这就是我想要的。

不能使用javascript(至少不能以所有浏览器支持的标准方式)或ajax将文件保存到本地文件系统。这就是为什么推荐的方法是不使用ajax,通常通过GET来实现。

然而,你可以通过jquery的.param()将带有参数的json对象转换为URL,如下面的答案所示。

如果你确实想探索javascript的替代方案,也许你可以看看只有chrome AFAIK支持的文件系统API