我在DT v1.10下面有以下代码:
var oTable = $('#items')
.dataTable({
sDom: "<'row'<'col-md-4'l><'col-md-6'f>r>t<'row'<'col-md-4'i><'col-md-7'p>>",
oLanguage: {
sLengthMenu: "_MENU_ per page"
},
ajax: "/items",
bProcessing: true,
bServerSide: true,
aoColumnDefs: [
{
aTargets: [-1],
bSearchable: false,
bSortable: false
}
]
})
.on('click', '.btn-danger', function (e) {
if (confirm('Are you sure you want to delete SKU "' + $(this).data('sku') + '"?')) {
$.getJSON($(this).attr('href'), function (data) {
if ('success' in data) {
oTable.ajax.reload(null, false);
}
});
}
event.stopPropagation();
return false;
});
当服务器成功响应时,它会尝试调用行oTable.ajax.reload(null, false);
,但我总是收到错误Uncaught TypeError: Cannot read property 'reload' of undefined
我在这里做错了什么?
答案 0 :(得分:20)
您正在使用旧的API:$().dataTable()
(v1.9及更早版本),它仍可在DataTables v1.10中使用。旧的API返回jQuery对象,因此您应该使用.api()
来使用DataTable API方法:
oTable.api().ajax.reload();
新API通过以下方式返回:$().DataTable()
问:我收到一条错误消息,指出API方法不可用 A。:很可能您使用的是jQuery对象而不是DataTables API实例。表单
$().dataTable()
将返回一个jQuery对象,而$().DataTable()
将返回一个DataTables API实例。有关详细信息,请参阅API文档。
请注意
$( selector ).DataTable()
和$( selector ).dataTable()
之间的区别。前者返回DataTables API实例,后者返回jQueryJS对象。将api()
方法添加到jQuery对象中,以便您可以轻松访问API,但jQuery对象可用于操作表节点,就像使用任何其他jQuery实例一样(例如使用{{1}等等。)。
答案 1 :(得分:8)
作为phillip100的答案的后续内容,您无需更改所有旧代码,也无需更改初始化方法以使用新API。您可以随时获取dataTables 1.10.x API:
...
if ('success' in data) {
//oTable.ajax.reload(null, false);
$('#items').DataTable().ajax.reload(null, false);
}
...
也会非常好。 jQuery dataTables检查是否已存在$("#items")
的dataTables实例,因此不存在冗余。