2015-07-20 101 views
2

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

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

Uncaught Error: DataTables warning: table id=table - Requested unknown parameter 'id' for row 0. For more information about this error, please see 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); 
} 
+0

此错误通常意味着数据格式不正确,请参阅更多[here](http://datatables.net/manual/tech-notes/4#Parameter-is-a-string)。如果您将'deferLoading'设置为正数以及'serverSide:true',则不应在第一次调用时请求数据,否则可能会有其他错误导致此错误。请显示您的DataTables初始化代码和服务器返回的数据。 –

+0

当我没有定义'columns'或'columnDefs'时没有引发错误(然后它使用它的默认值,通过它的索引引用列。)。 – madhukar93

回答

3

使用deferLoading选项与column.data共同的缺陷是在数据表论坛once reported。我能够使用v1.10.2 from CDN重现该错误,但不能使用v1.10.3以上版本,所以我们可以说这已被修复。这可能是由new feature”修复的,能够使用具有DOM源数据的columns.data将行信息读入对象而不是数组“。

因此,您可以:

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

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

+0

使用最新版本。在页面加载时获取错误 - 当它甚至没有发出ajax请求时 - 因此没有获得JSON响应,首次加载页面时,服务器呈现html。另外,有没有我用过的对象数据源类型?这是一组对象,就像在文档中一样? – madhukar93

+0

这个错误最终会出现在我的''列''定义中,因为在删除它时,它会按预期工作(当它使用它的默认设置时) – madhukar93

+0

那么,新版本修复了问题 – madhukar93