DataTable报错:Cannot read property 'sSortAscending' of undefined 求助
解决DataTable重新加载时的TypeError: Cannot read property 'sSortAscending' of undefined错误
这个错误我之前也碰到过,咱们来一步步拆解问题:
问题根源
你的代码里存在两个关键问题:
- 重复初始化DataTable:当表格已经是DataTable实例时,你先执行了
clear().rows.add(...)的更新操作,紧接着又再次调用DataTable()初始化方法。哪怕设置了bRetrieve: true,这种重复初始化的行为会打乱DataTable内部的状态管理,导致表头的排序相关属性无法正常读取,从而抛出这个错误。 - 排序配置格式错误:你的
order选项写的是[0, 'desc'],但DataTable要求这个配置必须是二维数组,正确格式应该是[[0, 'desc']],这个格式错误也可能触发内部属性异常。
修正后的代码
我们可以改成“先判断是否已初始化,已初始化就直接更新数据,未初始化再进行初始化”的逻辑:
let table; // 检查表格是否已经是DataTable实例 if ($.fn.DataTable.isDataTable('#tbl_mostrar_alarmas')) { // 已初始化,获取实例并更新数据 table = $('#tbl_mostrar_alarmas').DataTable(); table.clear().rows.add(tablaModalData).columns.adjust().draw(); } else { // 未初始化,执行初始化配置 table = $('#tbl_mostrar_alarmas').DataTable({ responsive: true, bLengthChange: false, pageLength: 5, data: tablaModalData, order: [[0, 'desc']], // 修正为二维数组格式 columns: [ { data: "fecha", defaultContent: "-" }, { data: "usuario", defaultContent: "-" }, { data: "suceso", defaultContent: "-" } ], columnDefs: [{ targets: 0, render: function(data) { return moment(data).format('DD/MM/YYYY HH:mm'); } }] }); }
额外注意事项
- 新版本DataTable推荐使用驼峰命名的配置项(比如
retrieve代替bRetrieve),虽然旧写法兼容,但统一风格会更规范。 - 如果你需要频繁更新表格数据,建议提前把表格实例存储在变量中,后续直接调用实例方法更新,避免重复判断和获取实例。
内容的提问来源于stack exchange,提问作者El Hombre Sin Nombre
相关产品推荐
相关产品推荐

