如何在JavaScript中将AJAX输出流式传输到文件下载?

Shr*_*eni 7 javascript csv ajax jquery download

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

似乎如果我们将所有数据都存储在JS内存中,那么将其写入CSV文件并不难,但如果我们要写出100K记录,那么我们将被迫一次性获取所有100K,然后生成文件一气呵成.

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

(我们目前正在使用jQuery 2.0.0,但不介意使用不同的库来完成这项工作)

Pra*_*ana 1

基本上你正在寻找记录分页......为此你可以这样做

  1. 查找数据库中的记录总数
  2. 比除您的记录/通话次数
  3. 合并来自不同调用的所有数据

要使用 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!" );
  }
});
Run Code Online (Sandbox Code Playgroud)

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