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

时间:2015-06-29 06:47:11

标签: javascript jquery ajax csv download

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 查找数据库中的记录总数
  2. 比划​​分您的记录/不打电话
  3. 合并来自不同来电的所有数据
  4. 使用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#而不是TPL(任务parellel库),那么你必须做的服务器端同样的事情...对于每个调用你需要使用页码

    来打电话