最近碰到了这个DataTables warning:table id = oaTableDate: Cannot reinitialise DataTable问题。使用DataTables做的表格,每次点击搜索功能,都会包这个错误。
错误是:无法重新初始化DateTable
原因是:我的方法里,有初始化的操作。我在搜索时,每次都会调用这个方法,然后每次就都会初始化表格。
解决方法:在写一个请求,让初始化的请求与搜索时调用的请求分开。
我从网上找了很多解决方法,但大都是使用$("#TableDate").dataTable().fnDestroy();。
我最开始也尝试使用这个方法,但是使用完成后发现还是会报错,区别是从前的每次点搜索报错,变成了现在只报一次错,而且在包一次错误之后,还把分页信息给丢失了。
后来在https://datatables.net/reference/api/里找到了另一种用法。
在js页面里,重写一个ajax请求,与初始化DataTable调用同一个方法。
先在页面定义一个变量var myTable=" "。之后再重写一个function
function reloadTablelist(month, year){
$.ajax({
type: “POST”,
url: “*.do”,
data: {YEAR: year, MONTH: month},
dataType: ‘json’,
cache: false,
async: false,
success: function (data) {
var currentPage = myTable.page();
myTable.clear();
myTable.rows.add(data);
myTable.page(currentPage).draw( false );
},
error:alert(“数据异常!”)
});
}
其中,clear()方法是从DataTables中删除所有行,导致数据长度集为0。然后可以使用该rows.add()方法添加新数据。
draw()方法是当执行诸如添加或删除行,更改表的排序,过滤或分页特征之类的操作时,需要DataTables更新显示以反映这些更改。
希望对你们有帮助,当初找解决方案的时候,找了很久。有兴趣的小伙伴可以去https://datatables.net这里看看,官方的使用手册还是很好用的。