2016-09-06 11 views
0

リモートcsvファイルからデータを読み込み、データテーブルに表示する前にいくつかの処理を行う次の関数があります。それは現在うまく機能JavascriptのPapa Parseを使用してリモートcsvから行数を取得する

function loadGrid() 
{ 
     link='{{ url("thecsvfile") }}/'+$('#class-id').val(); 
     Papa.parse(link, { 
     download: true,withCredentials: true,header:true, 
     step: function(results, parser) { 
     //.... process the data row by row 
     cleanDataForGrid(results.data); 
     }, 
     complete:function() 
     { 
      table =$('#the-grid').DataTable({ 
        responsive: true, 
        destroy: true, 
       'bProcessing': true, 
        paging: false, 
        searching: false, 
        info:false, 
        scrollCollapse:true, 
        'columnDefs': [{ 
           'targets': 0, 
           'searchable':false, 
           'orderable':false, 
           'width':'1%', 
           'className': 'dt-body-center', 
           'render': function (data, type, full, meta){ 
            return '<input type="checkbox" class="the_check">'; 
           }, 

           }], 

      }); 
      updateDownloaded(); 
     } 
     }); 

} 

は、問題は、csvファイルは、多くの行がある場合、それはロードに時間がかかり、時にはブラウザがハングまたは押しつぶすことです。 ファイルがX行以上でダウンロードが完全に行われない場合、最初に行数を取得する方法はありますか? 行カウントだけが返されるような実装を取得できるかどうか。

function getRows() 
{ 
var rowcount= Papa.parse(link, {download: false}); 
if(rowcount<50001) loadGrid(); 
} 

このような実装は可能ですか?

答えて

0

あなたのニーズを満たすサーバー側プログラムを照会することは完全に可能です。CSVファイルの行数を返します。

例:http://www.yoursite.com/handlers/csv/count?file=thecsvfile

あなたはjavascriptのコードでビュー返された値を初期化することができます。 phpとzendフレームワークでは、返された値をviewmodelに注入して、ビュー内に表示することができます。

Papa.parse("http://example.com/big.csv", { 
    download: true, 
    step: function(row) { 
     console.log("Row:", row.data); 
    }, 
    complete: function() { 
     console.log("All done!"); 
    } 
}); 

...比較的容易に行われます。

<script type="text/javascript"> 
<!-- 
var maxcsvfileSize = 50001; 
var thecsvfileSize = <?php echo $this->thecsvfileSize; ?>; 

function loadGrid(thecsvfileSize){ 
    // test the length of thecsvfile and do the job you need. 
    if (thecsvfileSize < maxcsvfileSize) { 
     // do the job 
    } 
} 

//--> 
</script> 

[EDIT]

Papi documentation上のビットを見て、あなたは大きなファイルを扱うためにストリームを使用する権利を持つことになりますあなたの質問とニーズに100%回答しています。

+0

これは、私がcsvファイルを提供するサーバーを制御していることを前提としています。 – indago

+0

アプリケーションは、ホスティング会社の分散サーバーアーキテクチャのようなローカルWebサーバーWAMPに展開されていますか? ローカルPCにインストールされている場合は、wgetや任意のlinuxツールを使用してダウンロードした後、csvファイルをPHP、APACHE、および解析します。 – ThierryB

+0

私のアプリはホスティング会社にありますが、csvファイルは別のシステムのものです。そのURLを 'http:// theip/path/theclassid'と呼ぶと、その場で生成されます。 – indago

関連する問題