DataTables:无法读取未定义的属性“长度”

我理解这是一个受欢迎的问题,我已经在Stack Overflow和其他网站(包括datatables网站)上阅读了所有类似的问题。

为了澄清,我正在使用

  • PHP Codeigniter
  • Materliazecss

我还确保我正确地收到了JSON数组:

[{"name_en":"hello","phone":"55555555"},{"name_en":"hi","phone":"00000000"}] 

我的HTML表格如下所示:

 
Name Phone

这是我的document.readyfunction:

  $(document).ready(function(){ //$('#customer_table').DataTable(); $('#customer_table').DataTable( { "ajax": 'json', "dataSrc": "", "columns": [ { "data": "email" }, { "data": "name_en" } ] }); }); 

我得到的错误是

未捕获的TypeError:无法读取未定义的属性“长度”

它甚至更简单:juste在ajax定义中使用dataSrc:''选项,因此dataTable不期望一个对象而是一个数组:

  $('#pos-table2').DataTable({ "processing": true, "serverSide": true, "ajax":{"url":"pos.json","dataSrc":""} } ); 

请参阅ajax选项

好的,谢谢大家的帮助。

然而问题要比那容易得多。

我需要做的就是修复我的JSON以将数组分配给名为data的属性,如下所示。

 { "data": [{ "name_en": "hello", "phone": "55555555", "email": "a.shouman", "facebook": "https:\/\/www.facebook.com" }, ...] } 

尝试如下返回必须是d,而不是d.data

  ajax: { "url": "xx/xxx/xxx", "type": "GET", "error": function (e) { }, "dataSrc": function (d) { return d } }, 

原因

这个错误TypeError: Cannot read property 'length' of undefined通常意味着jQuery DataTables无法在响应Ajax请求时找到数据。

默认情况下,jQuery DataTables期望数据采用下面显示的格式之一。 发生错误,因为数据以非默认格式返回。

数组数组

 { "data": [ [ "Tiger Nixon", "System Architect", "$320,800", "2011/04/25", "Edinburgh", "5421" ] ] } 

对象数组

 { "data": [ { "name": "Tiger Nixon", "position": "System Architect", "salary": "$320,800", "start_date": "2011/04/25", "office": "Edinburgh", "extn": "5421" } ] } 

使用默认格式或使用ajax.dataSrc选项在Ajax响应中定义包含表数据的数据属性(默认情况下为data )。

有关更多信息,请参阅数据arrays位置

链接

有关更多详细信息,请参阅jQuery DataTables:常见JavaScript控制台错误 。

当您有JSON数据时,会出现以下错误 在此处输入图像描述

更好的解决方案是为本地json数组对象分配var data ,详细信息请参见: https : //datatables.net/manual/tech-notes/4

这有助于您显示表格内容。

  $(document).ready(function(){ $('#customer_table').DataTable( { "aaData": data, "aoColumns": [{ "mDataProp": "name_en" }, { "mDataProp": "phone" }, { "mDataProp": "email" }, { "mDataProp": "facebook" }] }); }); 

在我的情况下,我必须将我的json分配给一个名为aaData的属性,就像在Datatables ajax中一样,数据看起来像这样 。

如果您使用ajax作为函数,请记住它期望将JSON数据返回给它,并设置参数。

 $('#example').dataTable({ "ajax" : function (data, callback, settings) { callback({ data: [...], recordsTotal: 40, recordsFiltered: 40} )); } }) 

虽然上面的答案很好地描述了这种情况,但在解决问题时还要检查浏览器是否真正获得了DataTables期望的格式。 可能还有其他原因无法获取data 。 例如,如果用户无权访问数据URL并获得某些HTML。 或者远程系统有一些不幸的“修复”到位。 浏览器的调试工具中的网络选项卡有帮助。