Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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将AJAX输出流式传输到文件下载?_Javascript_Jquery_Ajax_Csv_Download - Fatal编程技术网

如何以Javascript将AJAX输出流式传输到文件下载?

如何以Javascript将AJAX输出流式传输到文件下载?,javascript,jquery,ajax,csv,download,Javascript,Jquery,Ajax,Csv,Download,我们有一个restapi,它发出JSON,我们可以从中获取数据(使用AJAX)。我们想要做的是能够进行AJAX调用,其中每个调用获取一小块数据(比如5000行左右),然后将其作为下载写入浏览器上的CSV文件 似乎如果我们在JS内存中拥有所有数据,那么将其写入CSV文件并不困难,但是如果我们想要写出100K条记录,那么我们必须一次性获取所有100K条数据,然后一次性生成该文件 相反,我们觉得在服务器和客户机上下载小块并将其流式输出到文件下载会更温和。有办法吗 (我们目前正在使用jQuery 2.0

我们有一个restapi,它发出JSON,我们可以从中获取数据(使用AJAX)。我们想要做的是能够进行AJAX调用,其中每个调用获取一小块数据(比如5000行左右),然后将其作为下载写入浏览器上的CSV文件

似乎如果我们在JS内存中拥有所有数据,那么将其写入CSV文件并不困难,但是如果我们想要写出100K条记录,那么我们必须一次性获取所有100K条数据,然后一次性生成该文件

相反,我们觉得在服务器和客户机上下载小块并将其流式输出到文件下载会更温和。有办法吗


(我们目前正在使用jQuery 2.0.0,但不介意使用其他库来完成此操作)

基本上,您正在寻找记录分页……为此,您可以这样做

  • 查找数据库中的记录总数
  • 而不是将您的记录/通话次数分开
  • 合并来自不同调用的所有数据
  • 对于使用jquery进行多个调用,您可以这样做

    $.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
      // a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively.
      // Each argument is an array with the following structure: [ data, statusText, jqXHR ]
      var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
      if ( /Whip It/.test( data ) ) {
        alert( "We got what we came for!" );
      }
    });
    

    在代码中有多个ajax调用,最后它会合并数据……如果您使用C#than TPL(任务并行库),那么在服务器端必须做的同样的事情是一个不错的选择……对于每个调用,您都需要使用页码进行调用

    为什么不使用隐藏的iframe将流作为文件下载@亨利克,这是可行的,毕竟我在JS内存中有所有的内容。我想做取回->写入文件->取回的循环。?它永远不会进入JS内存。。JS只是通过将iframe的源代码指向源代码来启动下载。浏览器负责下载,服务器负责将文件分块到网络包中——还是我完全误解了这个问题?API只提供JSON,在发送到CSV文件之前,我们需要在JS中处理它。此外,一轮API拉取只能返回有限的一组记录(5K),但总体数据可能是100K。此外,我们无法修改APU服务器(以分块包和/或更改输出格式)…这仍然需要我在JS内存中有效存储所有内容,这是我首先要避免的。