如何用新的 JSON 数据手动更新 datatables table
How to manually update datatables table with new JSON data
我正在使用插件 jQuery datatables 并在页面底部加载我在 DOM 中加载的数据,并以这种方式启动插件:
var myData = [
{
"id": 1,
"first_name": "John",
"last_name": "Doe"
}
];
$('#table').dataTable({
data: myData
columns: [
{ data: 'id' },
{ data: 'first_name' },
{ data: 'last_name' }
]
});
现在。执行一些操作后,我想使用 ajax 获取新数据(但不是 ajax 选项构建在数据 tables - 不要误会我的意思!)并更新 table 有了这些数据。我如何使用 datatables API 来做到这一点?文档非常混乱,我找不到解决方案。任何帮助将不胜感激。谢谢
您可以使用:
$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);
更新。是的,当前的文档不是很好,但是如果您可以使用旧版本,您可以参考 legacy documentation.
解决方案:(注意:此解决方案适用于数据表版本 1.10.4(目前)而非旧版本)。
澄清 根据 API documentation (1.10.15),可以通过三种方式访问 API:
DataTables 的现代定义(大驼峰式):
var datatable = $( selector ).DataTable();
DataTables 的遗留定义(小驼峰式):
var datatable = $( selector ).dataTable().api();
使用 new
语法。
var datatable = new $.fn.dataTable.Api( selector );
然后像这样加载数据:
$.get('myUrl', function(newDataArray) {
datatable.clear();
datatable.rows.add(newDataArray);
datatable.draw();
});
使用draw(false)
在数据更新后保持在同一页面。
API 参考文献:
https://datatables.net/reference/api/clear()
在我的例子中,我没有使用内置的 ajax api 将 Json 提供给 table(这是由于某些格式相当难以在数据table 的渲染回调中实现。
我的解决方案是在 onload 函数和处理数据刷新的函数的外部范围内创建变量(例如 var table = null
)。
然后我在加载方法
中实例化我的table
$(function () {
//.... some code here
table = $("#detailReportTable").DataTable();
.... more code here
});
最后,在处理刷新的函数中,我调用 clear() 和 destroy() 方法,将数据提取到 html table 中,然后重新实例化数据table,因此:
function getOrderDetail() {
table.clear();
table.destroy();
...
$.ajax({
//.....api call here
});
....
table = $("#detailReportTable").DataTable();
}
我希望有人觉得这有用!
这是遗留数据表 1.9.4 的解决方案
var myData = [
{
"id": 1,
"first_name": "Andy",
"last_name": "Anderson"
}
];
var myData2 = [
{
"id": 2,
"first_name": "Bob",
"last_name": "Benson"
}
];
$('#table').dataTable({
// data: myData,
aoColumns: [
{ mData: 'id' },
{ mData: 'first_name' },
{ mData: 'last_name' }
]
});
$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);
您需要销毁旧数据-table实例,然后重新初始化数据-table
首先使用 $.fn.dataTable.isDataTable
检查 data-table 实例是否存在
如果存在就销毁它,然后像这样创建新的实例
if ($.fn.dataTable.isDataTable('#dataTableExample')) {
$('#dataTableExample').DataTable().destroy();
}
$('#dataTableExample').DataTable({
responsive: true,
destroy: true
});
我正在使用插件 jQuery datatables 并在页面底部加载我在 DOM 中加载的数据,并以这种方式启动插件:
var myData = [
{
"id": 1,
"first_name": "John",
"last_name": "Doe"
}
];
$('#table').dataTable({
data: myData
columns: [
{ data: 'id' },
{ data: 'first_name' },
{ data: 'last_name' }
]
});
现在。执行一些操作后,我想使用 ajax 获取新数据(但不是 ajax 选项构建在数据 tables - 不要误会我的意思!)并更新 table 有了这些数据。我如何使用 datatables API 来做到这一点?文档非常混乱,我找不到解决方案。任何帮助将不胜感激。谢谢
您可以使用:
$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);
更新。是的,当前的文档不是很好,但是如果您可以使用旧版本,您可以参考 legacy documentation.
解决方案:(注意:此解决方案适用于数据表版本 1.10.4(目前)而非旧版本)。
澄清 根据 API documentation (1.10.15),可以通过三种方式访问 API:
DataTables 的现代定义(大驼峰式):
var datatable = $( selector ).DataTable();
DataTables 的遗留定义(小驼峰式):
var datatable = $( selector ).dataTable().api();
使用
new
语法。var datatable = new $.fn.dataTable.Api( selector );
然后像这样加载数据:
$.get('myUrl', function(newDataArray) {
datatable.clear();
datatable.rows.add(newDataArray);
datatable.draw();
});
使用draw(false)
在数据更新后保持在同一页面。
API 参考文献:
https://datatables.net/reference/api/clear()
在我的例子中,我没有使用内置的 ajax api 将 Json 提供给 table(这是由于某些格式相当难以在数据table 的渲染回调中实现。
我的解决方案是在 onload 函数和处理数据刷新的函数的外部范围内创建变量(例如 var table = null
)。
然后我在加载方法
中实例化我的table$(function () {
//.... some code here
table = $("#detailReportTable").DataTable();
.... more code here
});
最后,在处理刷新的函数中,我调用 clear() 和 destroy() 方法,将数据提取到 html table 中,然后重新实例化数据table,因此:
function getOrderDetail() {
table.clear();
table.destroy();
...
$.ajax({
//.....api call here
});
....
table = $("#detailReportTable").DataTable();
}
我希望有人觉得这有用!
这是遗留数据表 1.9.4 的解决方案
var myData = [
{
"id": 1,
"first_name": "Andy",
"last_name": "Anderson"
}
];
var myData2 = [
{
"id": 2,
"first_name": "Bob",
"last_name": "Benson"
}
];
$('#table').dataTable({
// data: myData,
aoColumns: [
{ mData: 'id' },
{ mData: 'first_name' },
{ mData: 'last_name' }
]
});
$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);
您需要销毁旧数据-table实例,然后重新初始化数据-table
首先使用 $.fn.dataTable.isDataTable
检查 data-table 实例是否存在如果存在就销毁它,然后像这样创建新的实例
if ($.fn.dataTable.isDataTable('#dataTableExample')) {
$('#dataTableExample').DataTable().destroy();
}
$('#dataTableExample').DataTable({
responsive: true,
destroy: true
});