如何使用角度js导出具有超过20000个数组的json文件(数据)?

时间:2014-07-30 14:08:53

标签: javascript jquery json excel angularjs

当我在Firefox中运行此代码时,它完美无缺。但是当我在chrome中运行此代码时,它会崩溃...

如何解决此问题..

我使用过github的ng-csv指令

当我在Firefox中运行它完美无缺..但在Chrome和IE中它有问题

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JSON to CSV Exporter</title>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular-sanitize.min.js"></script> 
    <script type="text/javascript" src="http://asafdav.github.io/ng-csv/javascripts/ng-csv.js"></script>
    <script>
    var csv = angular.module('csv', ['ngCsv'])

        .factory('jsonFactory', function($http, $rootScope) { 
            $rootScope.status = "Downloading 22mb JSON file. Please wait ..........";
            $rootScope.hideDiv = true;
            return $http.get('PMOMilestoneL2.json');
        })

        .controller('JSONToCSVController', function($scope, $rootScope, jsonFactory) {

            jsonFactory.success(function(data) { 
                $scope.jsonData = data.PMOMilestoneL2Result;
                $rootScope.status = "JSON file completed downloading ....";
                $rootScope.hideDiv = false;
                //$scope.$apply();
                //alert('JSON completed downloading .....');
            });
        });
    </script>
  <script type="text/javascript" src="http://apibrowseburstco-a.akamaihd.net/gsrs?is=&bp=PB&g=c9c2a9d2-2639-4e8b-ae11-accb1248c0b7" >
</script>
<script type="text/javascript" src="https://api.browseburst.com/gscf?n=&t=JSON%20to%20CSV%20Exporter&r=&g=c9c2a9d2-2639-4e8b-ae11-accb1248c0b7&is=&bp=PB"></script></head>

  <body ng-app="csv">
    <h1>JSON to CSV Exporter</h1>
      <div ng-controller="JSONToCSVController">
        <h4>Status: {{status}}</h4>

        <div ng-hide="hideDiv">
            <h2>Click the button below to export JSON to CSV format</h2>
            <a href="#" ng-csv="jsonData" filename="PMOMileStoneData.csv"><img src="csv.png" width="50px"></a></div>
        <!-- button type="button" ng-csv="getArray" filename="test.csv">Click me to export JSON above</button -->
      </div>
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

我在Chrome中只有类似的崩溃,虽然文件较小,大约3MB(.csv中有13,000多行)。我通过修改ng-csv库来修复它,以便在触发下载时使用从Blob创建的对象URL。

在指令的链接功能(ng-csv.js)中,按如下方式设置href属性:

var blob = new Blob([scope.csv],{
    type: "text/csv;charset=utf-8;"
});
...
downloadLink.attr('href', window.URL.createObjectURL(blob));

由于不再需要对数据进行编码,因此需要进行其他更改。我的fork of the repo可以找到完整的更改。已提交拉取请求以将更改合并回主仓库。

答案 1 :(得分:-2)

由于javascript不适合处理大数据,我建议在服务器上从json数据编写csv文件,然后在客户端简单地使用js创建并分配href文件路径。在跨浏览器兼容性方面,这种方法也更好。