DataTable()。ajax.reload()未定义

时间:2015-02-04 04:08:36

标签: datatables jquery-datatables

我在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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:20)

您正在使用旧的API:$().dataTable()(v1.9及更早版本),它仍可在DataTables v1.10中使用。旧的API返回jQuery对象,因此您应该使用.api()来使用DataTable API方法:

oTable.api().ajax.reload();

新API通过以下方式返回:$().DataTable()

Datatables FAQ

  

问:我收到一条错误消息,指出API方法不可用    A。:很可能您使用的是jQuery对象而不是DataTables API实例。表单$().dataTable()将返回一个jQuery对象,而$().DataTable()将返回一个DataTables API实例。有关详细信息,请参阅API文档。

API documentation

  

请注意$( 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实例,因此不存在冗余。