JQueryDatatables: 无法读取未定义的“ aDatasort”属性

我创建了这个小提琴,它按照我的要求工作得很好: 小提琴

但是,当我在我的应用程序中使用相同的时候,我在浏览器控制台中得到一个错误,说 Cannot read property 'aDataSort' of undefined

在我的应用程序中,javascript 读取的内容如下: 我已经检查了控制器输出... 它工作得很好,并且也打印在控制台上。

$(document).ready(function() {


$.getJSON("three.htm", function(data) {
// console.log("loadDataTable >>  "+JSON.stringify(data));
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ', ' + error;
alert(err);
console.log( "Request Failed: " + err);
})
.success(function(data){
loadDataTable(data);
});


function loadDataTable(data){
$("#recentSubscribers").dataTable().fnDestroy();
var oTable = $('#recentSubscribers').dataTable({
"aaData" : JSON.parse(data.subscribers),
"processing": true,
"bPaginate": false,
"bFilter": false,
"bSort": false,
"bInfo": false,
"aoColumnDefs": [{
"sTitle": "Subscriber ID",
"aTargets": [0]
}, {
"sTitle": "Install Location",
"aTargets": [1]
}, {
"sTitle": "Subscriber Name",
"aTargets": [2]
}, {
"aTargets": [0],
"mRender": function (data, type, full) {
return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>';
}
}],
"aoColumns": [{
"mData": "code"
}, {
"mData": "acctNum"
}, {
"mData": "name"
}]
});


}


})
230302 次浏览

我遇到了同样的问题,下面的改变解决了我的问题。

$(document).ready(function() {
$('.datatable').dataTable( {
bSort: false,
aoColumns: [ { sWidth: "45%" }, { sWidth: "45%" }, { sWidth: "10%", bSearchable: false, bSortable: false } ],
"scrollY":        "200px",
"scrollCollapse": true,
"info":           true,
"paging":         true
} );
} );

aoColumns数组描述每列的宽度及其 sortable属性。

另一个需要提及的错误是,当您按列排序时,也会出现此错误 不存在的数字。

在表格中不要留空,这一点很重要。因为 dataTable 要求您指定预期数据的列数。 根据你的数据,它应该是

<table id="datatable">
<thead>
<tr>
<th>Subscriber ID</th>
<th>Install Location</th>
<th>Subscriber Name</th>
<th>some data</th>
</tr>
</thead>
</table>

Also had this issue, 这个数组超出了范围:

order: [1, 'asc'],

For me, the bug was in DataTables itself; The code for sorting in DataTables 1.10.9 will not check for bounds; thus if you use something like

order: [[1, 'asc']]

对于一个空表,没有行 idx 1-> 这个异常确保。 这是在异步获取表的数据时发生的。最初,在页面加载时,dataTable 在没有数据的情况下被初始化。一旦获取了结果数据,就应该立即对其进行更新。

我的解决办法是:

// add within function _fnStringToCss( s ) in datatables.js
// directly after this line
// srcCol = nestedSort[i][0];


if(srcCol >= aoColumns.length) {
continue;
}


// this line follows:
// aDataSort = aoColumns[ srcCol ].aDataSort;

对我来说,是的

$(`#my_table`).empty();

它应该在哪里

$(`#my_table tbody`).empty();

注意: 在我的例子中,我必须清空表,因为在插入新数据之前,我有想要删除的数据。

Just thought of sharing where it "might" help someone in the future!

我有这个问题,是因为另一个脚本正在删除所有的表并重新创建它们,但是我的表没有被重新创建。我花了很长时间在这个问题上,直到我注意到我的表甚至不可见在页面上。在初始化 DataTables 之前,您能看到您的表吗?

基本上,另一个剧本是这样的:

let tables = $("table");
for (let i = 0; i < tables.length; i++) {
const table = tables[i];
if ($.fn.DataTable.isDataTable(table)) {
$(table).DataTable().destroy(remove);
$(table).empty();
}
}

它本应该这样做:

let tables = $("table.some-class-only");
... the rest ...

由于要进行解析,需要将单引号 [']切换为双引号 ["]

if you are using 数据顺序 attribute on the table then use it like this data-order='[[1, "asc"]]'

在我的例子中,我通过在配置数据表的脚本中应用 order属性时建立一个有效的列号来解决这个问题。

var table = $('#mytable').DataTable({
.
.
.
order: [[ 1, "desc" ]],

我在页面上有多个表,并试图一次将它们全部初始化,结果出现了这样的错误:

$('table').DataTable();

经过反复试验,我将它们分开初始化,错误消失了:

$("#table1-id").DataTable();
$("#table2-id").DataTable();

大多数情况下,它发生在某些未定义的事情上。我复制了代码,并删除了一些扰乱索引顺序的列。小心地做出改变以及改变后的每一个变量。 “ order”: [[1,“ desc”]] ,修复了之前 i 使用“ order”: [[24,“ desc”]的问题,而该索引不可用。

我的解决方案

加上这个:

order: 1 ,

For me 以这种格式添加列

columns: [
{ data: 'name' },
{ data: 'position' },
{ data: 'salary' },
{ data: 'state_date' },
{ data: 'office' },
{ data: 'extn' }
]

和 ajax 在这种格式

 ajax: {
url: '/api/foo',
dataSrc: ''
},

解决了。

这是个老问题,但是在我的例子中,我传递了一个不相关的顺序 = ,这个顺序在 URL 中有时是空的。一旦我将 url 变量改为“ sortorder”或者其他不是“ order”的东西,插件就开始正常工作了。

I got the same error, In my case one of the columns was not receiving proper data. some of the columns had strings in place of Integers. after i fixed it it started working properly. In most of the cases the issue is "table not receiveing proper data".

Just my two cents regarding order: [...]; 它不会检查项目类型,在我的例子中,我传递的是 [arrOrders],而不仅仅是 arrOrders[...arrOrders],结果是 [[[ 1, "desc" ], [ 2, "desc" ]]]