2016-09-06 82 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注入返回的值,並在視圖中顯示它自己。

<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> 

[編輯]

看好Papi documentation一點,你將不得不使用流來處理大文件的權限:

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

...這是比較容易做到並且100%回答您的問題和需求。

+0

這假設我有服務器上的控制服務器csv文件... – indago

+0

您的應用程序是否部署在本地網絡服務器WAMP上或從託管公司的分佈式服務器體系結構上? 如果是在本地PC上安裝PHP,APACHE並使用wget或任何Linux工具下載後解析csv文件,則您更喜歡。 – ThierryB

+0

我的應用程序位於託管公司,但csv文件來自另一個系統,當您調用該URL時,通常會生成csv文件,例如'http:// theip/path/theclassid' – indago