是否可以发布包含大量json数据的表单并作为.csv文件返回?

时间:2012-01-05 10:43:54

标签: javascript ajax asp.net-mvc json

我想将大量缓存的json数据从导入过程发送到MVC控制器,MVC控制器将以CSV格式响应文本文件。

问题是如果我使用AJAX调用,浏览器无法处理响应并下载文件。

如果我使用常规表单帖子,那么浏览器将处理返回的文件响应。但是,AFAIK发布一个表单我无法发送Json数据而且我不想在查询字符串上发送数据。

好像我在岩石和坚硬的地方之间。实现这一目标的最佳选择是什么?我想避免将数据文件写入服务器。基本上我只想发送大量的json数据并作为下载请求返回给浏览器。

4 个答案:

答案 0 :(得分:1)

只是我的两分钱。如果您不想创建文件,只需在会话中(或您喜欢的任何地方)缓存数据。

所以:

  1. 执行json数据的ajax帖子
  2. Controller操作中的
  3. 将数据存储在某处(例如Session)并创建一个密钥以便以后访问它(一个guid)并将其作为json对象返回。
  4. 在成功ajax函数中,调用另一个传递通过正常location.href = url + key
  5. 获得的密钥的动作

    除了没有文件外,它与保存文件服务器端非常相似。

答案 1 :(得分:0)

雅法,

你可以从SO上的这篇文章中获得灵感:

How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller?

在实践中,我通过ajax发布json对象当然是在我的应用程序的管理部分。至于发送回csv输出,通过partialupdate(即调用保存对话框)很难(如果不是不可能的话)。你当然可以将csv作为部分返回并填充div,但我想这不是一个可接受的解决方案。

答案 2 :(得分:0)

我想我会将JSON数据分配给<input type='hidden'/>,然后执行$('form').submit()

答案 3 :(得分:0)

实际上,我认为最好的解决方案如下:

  1. 执行从服务器获取CSV的AJAX POST
  2. 使用data: URI方案查看CSV:
  3. 直接

    location.href = "data:text/csv;charset=utf-8,Value 1, Value 2, Value 3";
    

    或在AJAX完成时准备一个链接,如下所示:

    <a href="data:text/csv;charset=utf-8,Value 1, Value 2, Value 3">Conversion finished. Save</a>
    

    这适用于IE8中的限制。完全支持IE9,当然还有其他地方。