Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以发布包含大量json数据的表单并以.csv文件的形式返回?_Javascript_Ajax_Asp.net Mvc_Json - Fatal编程技术网

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

Javascript 是否可以发布包含大量json数据的表单并以.csv文件的形式返回?,javascript,ajax,asp.net-mvc,json,Javascript,Ajax,Asp.net Mvc,Json,我想将大量缓存的json数据从导入过程发送到MVC控制器,MVC控制器将以CSV格式的文本文件进行响应 问题是,如果使用AJAX调用,浏览器将无法处理响应并下载文件 如果我使用常规表单post,那么浏览器将处理返回的文件响应。但是,如果要发布表单,我不能发送Json数据,也不想发送查询字符串上的数据 看来我是进退两难。我实现这一目标的最佳选择是什么?我希望避免将数据文件写入服务器。基本上,我只想发送大量json数据并作为下载请求返回到浏览器。jaffa 你可以从这篇文章中获得灵感,因此: 实际

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

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

如果我使用常规表单post,那么浏览器将处理返回的文件响应。但是,如果要发布表单,我不能发送Json数据,也不想发送查询字符串上的数据

看来我是进退两难。我实现这一目标的最佳选择是什么?我希望避免将数据文件写入服务器。基本上,我只想发送大量json数据并作为下载请求返回到浏览器。

jaffa

你可以从这篇文章中获得灵感,因此:

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

jaffa

你可以从这篇文章中获得灵感,因此:


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

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

因此:

  • 执行json数据的ajax post
  • 在控制器操作中,将数据存储在某个位置(例如会话),并创建一个密钥以稍后访问它(guid),并将其作为json对象返回
  • 在success ajax函数中,调用另一个操作,传递通过normal location.href=url+key获得的密钥

  • 这与保存文件服务器端非常相似,只是没有文件。

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

    因此:

  • 执行json数据的ajax post
  • 在控制器操作中,将数据存储在某个位置(例如会话),并创建一个密钥以稍后访问它(guid),并将其作为json对象返回
  • 在success ajax函数中,调用另一个操作,传递通过normal location.href=url+key获得的密钥

  • 这与保存文件服务器端非常相似,只是没有文件。

    我想我会将JSON数据分配给
    ,然后执行
    $('form')。submit()
    我想我会将JSON数据分配给
    ,然后执行
    $('form')。submit()
    实际上,我认为最好的解决办法是:

  • 执行从服务器获取CSV的AJAX POST
  • 使用
    数据:
    URI方案查看CSV:
  • 要么直接

    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的全面支持,当然还有其他任何地方。

    事实上,我认为最好的解决方案是:

  • 执行从服务器获取CSV的AJAX POST
  • 使用
    数据:
    URI方案查看CSV:
  • 要么直接

    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,当然还有其他任何地方。

    +1 BigMike。在大多数情况下,浏览器的“怪癖”都应该起作用,当然,这听起来很有希望。我只关心会话中要缓存的数据量。可能会有100s-1000s的字符串,因为我不确定这些导入会有多大。不过,每个字符串不会特别长。jaffa-您当然可以将其保存到文件系统中,而不是保存到会话中,然后在成功下载时删除文件。@Jim-灯泡刚刚亮起。如果我只是在导入后将要缓存的行填充到db表中,并在用户请求下载时提供这些行,会怎么样?@jaffa-是的,基于表的方法会很好。您还可以在同一个表中添加datetime列,以指示“文件”已被请求和下载,然后可以用作存档功能。当然,你可以扩展这个方案,在数据上加入下载权限等。在大多数情况下,浏览器的“怪癖”都应该起作用,当然,这听起来很有希望。我只关心会话中要缓存的数据量。可能会有100s-1000s的字符串,因为我不确定这些导入会有多大。不过,每个字符串不会特别长。jaffa-您当然可以将其保存到文件系统中,而不是保存到会话中,然后在成功下载时删除文件。@Jim-灯泡刚刚亮起。如果我只是在导入后将要缓存的行填充到db表中,并在用户请求下载时提供这些行,会怎么样?@jaffa-是的,基于表的方法会很好。您还可以在同一个表中添加datetime列,以指示“文件”已被请求和下载,然后可以用作存档功能。当然,你可以扩展这个方案,在数据上加入下载权限等。有趣的方法是,我想我必须用CR delimeter连接所有单独的行。不知道这个字段可以包含多少数据…我发布了另一个可能更好的解决方案。如果您想采用基于表单的方法,我认为这个方法值得研究。但这还不是所有浏览器都支持的。有趣的方法是,我想我必须加入所有的浏览器