【问题标题】:DataTables deferred loading with columns optionDataTables 延迟加载列选项
【发布时间】:2015-07-20 14:30:17
【问题描述】:

我正在使用 jQuery DataTables 的服务器端处理模式 ("serverSide": true)。我正在使用deferred loading option 来优化我的页面加载时间。

我也在使用columns 选项,但是当我自己定义columns 选项时出现了一些冲突。当第一次调用没有数据源时,它会尝试查找数据源,这就是延迟加载的全部意义所在。

未捕获的错误:DataTables 警告:表 id=table - 请求第 0 行的未知参数“id”。有关此错误的详细信息,请参阅http://datatables.net/tn/4

初始化代码:

function initialize_table(inital_length)
{
    table_options = {
        "serverSide": true,
        "ajax": {
            "url": '/merchant/all/',
            "type": 'POST',
            "deferRender": true,
            // data: JSON.stringify(data),
            // contentType: "application/json",
        },
        // "order": [[0, 'asc']]
        "deferRender": true,
        "processing": true,
        "pageLength": 50,
        "deferLoading": inital_length,
        "lengthMenu": [ 20, 50, 100, 200, 500 ],
        "columnDefs": [
            {
                // "class": "details-control",
                'data': 'gr_id', // response[data]
                'name': 'gr_id', 
                'orderable': true,
                'search': {'regex': false, 'value': ''},
                'searchable': true,
                "targets": 0,
            },
            { 
                'data': "name",
                'name': 'name',
                'orderable': true,
                'search': {'regex': false, 'value': ''},
                'searchable': true,
                "targets": 1,

            },
            { 
                'data': "address",
                'name': 'address',
                'orderable': false,
                'search': {'regex': false, 'value': ''},
                'searchable': true,
                "targets": 2,
            },
            {
                'data': "category",
                'name': 'category',
                'orderable': true,
                'search': {'regex': false, 'value': ''},
                'searchable': true,
                "targets": 3,
            },
            {
                'data': "chain",
                'name': 'chain',
                'orderable': true,
                'search': {'regex': false, 'value': ''},
                'searchable': true,
                "targets": 4,
            },
            {
                'data': "enabled",
                'name': 'enabled',
                'orderable': true,
                'search': {'regex': false, 'value': ''},
                'searchable': true,
                "targets": 5,
            },
            {
                'data': 'status',
                'name': 'status',
                'orderable': true,
                'search': {'regex': false, 'value': ''},
                'searchable': true,
                "targets": 6,
            }
        ],
    }
    var merchant_table = $("#merchant-table").DataTable(table_options);
}

【问题讨论】:

  • 这个错误通常表示数据格式不正确,更多见here。如果您将deferLoadingserverSide: true 一起设置为正数,则它不应在第一次调用时请求数据,可能有其他错误导致此问题。请显示您的 DataTables 初始化代码和服务器返回的数据。
  • 当我没有定义 columnscolumnDefs 时没有抛出错误(然后它使用它的默认值,通过它的索引引用列。)。

标签: javascript jquery datatables datatables-1.10


【解决方案1】:

在 DataTables 论坛中使用deferLoading 选项和column.data 的错误是once reported。我能够使用v1.10.2 from CDN 重现该错误,但不能使用 v1.10.3 及更高版本,因此我们可以说这已得到修复。 new feature使用 columns.data 和 DOM 源数据将行信息读入对象而不是数组的能力”可能已解决了这个问题。

所以你可以:

1) 首先确保您使用的是latest version

2) 检查您的 JSON 响应。根据您的 cmets,您使用的是 array data source type,但是当您设置 column.data 选项时,您必须改用 object data source type

【讨论】:

  • 使用最新版本。在页面加载时出现错误 - 当它甚至没有发出 ajax 请求时 - 因此没有得到 JSON 响应,第一次加载页面时,服务器会呈现 html。另外,我使用的不是对象数据源类型吗?它是一个对象数组,就像在文档中一样?
  • 这个错误最终归咎于我的"columns" 定义,因为在删除它时,它按预期工作(当它使用它的默认值时)
  • 嗯,新版本解决了这个问题
猜你喜欢
  • 2018-04-26
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多