2016-08-17 35 views
1

我们已经使用DataTable.js来绑定网格。我们有大约数千条记录,所以最初我们将绑定500条记录,然后我们逐一插入它们。但是在逐个插入时屏幕会冻结。我们已经编写了JavaScript代码来逐个插入它。DataTable JS插入问题

所有的
function bindLoadOverView() { 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     dataType: 'json', 
     url: "../Loads/board.aspx/bindView", 
     success: function(data1) { 
     var aData = data1.d; 
     for (var i = 500; i < aData.length; i++) { 
      table.row.add([ 

      null, 
      aData[i].row1, 
      aData[i].row2 
      ]).draw(false); 
     } 
     }) 
    }); 
} 

回答

0

首先,在你的dataTable初始化设置deferRendertrue。这将防止dataTables在不需要时执行一些缓慢的DOM操作。 另外请在add()之后跳过draw(),这是完全多余的。

要防止页面/其他脚本被阻塞,可以使用interval来插入行。我知道你只是想静静地在后台插入其余的行。在插入行时,使用间隔会给其他线程空间进行处理。例如:

var index = 500, 
    max = aData.length, 
    insert = window.setInterval(function() { 

     table.row.add([ 
     null, 
     aData[i].row1, 
     aData[i].row2 
     ]) 

     index++ 
     if (index == max) window.clearInterval(insert) 

    }, 20) 

之后,你可以draw()表,如果由于某种原因需要或必要的。