我正在尝试添加数据到DB,并使用ajax和jQuery数据表在同一页面显示这些数据,而无需重新加载或刷新页面。我的代码是保存和检索数据到/从数据库。但更新的数据列表不显示在datatable没有键入搜索框或单击表头。在加载页面时遇到同样的问题。
我的代码
//show data page onload
$(document).ready(function() {
catTable = $('#cat_table').DataTable( {
columns: [
{ title: "Name" },
{ title: "Level" },
{ title: "Create Date" },
{ title: "Status" }
]
});
get_cat_list();
});
//save new entry and refresh data list
$.ajax({
url: 'category_save.php',
type: 'POST',
data:{name: name,level: level},
success: function (data) {
get_cat_list();
},
error: function (data) {
alert(data);
}
});
//function to retrieve data from database
function get_cat_list() {
catTable.clear();
$.ajax({
url: 'get_category_list.php',
dataType: 'JSON',
success: function (data) {
$.each(data, function() {
catTable.row.add([
this.name,
this.level,
this.create_date,
this.status
] );
});
}
});
}
解决方案在这里 -为DataTable服务器端数据源启用
.draw()将导致您的整个数据表重新加载,假设您将其设置为显示100行,调用。row().add().draw()>Datatable将从服务器重新加载100行
我浪费了一个小时试图找到这个非常古老的问题的解决方案,即使在DataTable官方支持上也没有好的解决方案建议…
我的解决方案是
1- call .row().add()
2-不调用。draw()
3-你的行必须有一个Id标识符来使用它作为一个选择器(检查数据表的rowId设置)
4-调用。row().add()后,数据表将有行添加到它的本地数据
5-我们需要从数据表对象中获取这一行,并使用内置方法。node()
将其转换为HTML6-我们将把结果HTML添加到表中:)
所有这些都可以在两行代码中完成
var rowData = someRowCreatedByAnAjaxRequest;
myDataTableObject.row.add(rowData);
$("#myTable-dt tbody").prepend(myDataTableObject.row(`tr#${rowData.Id}`).node().outerHTML)
由于☺从文档中
该方法会在内部将数据添加到表中,但不会可视化地更新表显示,以说明这个新数据。
为了更新表的显示,使用draw()方法,它可以简单地作为row.add()方法返回对象的链接方法调用。
那么你的成功方法应该是这样的
$.each(data, function() {
catTable.row.add([
this.name,
this.level,
this.create_date,
this.status
]).draw();
});