【问题标题】:JQuery Datable throwing error for valid "columns" option parameter有效“列”选项参数的 JQuery Datable 抛出错误
【发布时间】:2021-03-12 14:45:40
【问题描述】:

好的,所以我有一个结构如下的 jquery 数据表

$(document).ready(function () {
    var table = $('#tableContent').DataTable({
            "processing": true,
            "serverSide": true,
            "filter": true,
            "ajax": {
                "url": "path/to/api",
                "type": "POST",
                "datatype": "json"
            },
            "columnDefs": [{
                "searchable": false,
                "orderable": false,
                "targets": 0
            }],
            "columns": [
                null,
                { "data": "data1", "name": "data1", "autoWidth": true },
                { "data": "data2", "name": "data2", "autoWidth": true },
                { "data": "data3", "name": "data3", "autoWidth": true },
                { "data": "data4", "name": "data4", "autoWidth": true },
                { "data": "data5", "name": "data5", "autoWidth": true },
                { "data": "data6", "name": "data6", "autoWidth": true },
                { "data": "data7", "name": "data7", "autoWidth": true }
            ],
            "order": [[1, 'asc']]
        });

        table.on('order.dt search.dt page.dt', function () {
            table.column(0, { search: 'applied', order: 'applied' }).nodes().each(function (cell, i) {
                cell.innerHTML = i + 1;
            });
        }).draw();
});

<table class="tableWrapper" id="tableContent">
        <thead>
            <tr>
                <th>#</th>
                <th>data1</th>
                <th>data2</th>
                <th>data3</th>
                <th>data4</th>
                <th>data5</th>
                <th>data6</th>
                <th>data7</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
        <tfoot>
        </tfoot>
    </table>

这是对被调用 Api 的 JSON 响应

{   
    "draw":"1",
    "recordsFiltered":48,
    "recordsTotal":48,
    "data":[
        {
            "data1":"XXXX",
            "data2":"XXXX",
            "data3":"XXXX",
            "data4":"XXXX",
            "data5":"XXXX",
            "data6":"XXXX",
            "data7":"XXXX"
        }...
    ]
}

它会抛出这个错误:

“DataTables 警告:table id=tableContent - 请求第 0 行第 0 列的未知参数“0”。有关此错误的更多信息,请参阅http://datatables.net/tn/4"(Attached error message picture)

但是!抛出错误后不久,数据加载没有问题。

null 替换为{data:null} 似乎可以消除错误,但它会与我的索引列混淆。本来应该是 1,2,3,4... 的序列现在只是一堆 [object Object] see image

【问题讨论】:

  • 您问题中的代码存在语法错误 - 看起来像是不完整的复制/粘贴问题。你能edit 修复吗?另外,您能否提供原始 JSON 文本响应的示例?
  • @andrewjames 我修复了它,还提供了示例 JSON 响应
  • 如您所见,在您的 cmets 将 null 替换为 {data:null} 时,您的 HTML 表指定了 8 列。您的 ajax 响应仅提供其中 7 个的数据。 &lt;th&gt;#&lt;/th&gt; 列没有数据 - 这对 DataTables 无效。您打算如何填充该索引列?数据(1、2、3...)从哪里来?
  • @andrewjames,索引列由table.on('order.dt search.dt page.dt') 填充。我想我可以只传入一个空值,然后在触发 dataTables 的事件后替换它。
  • @andrewjames,但是感谢您的帮助!我应该只在服务器端而不是客户端处理索引

标签: javascript html jquery datatables frontend


【解决方案1】:

获得您想要的东西的方法不止一种。这是一种方法,它使用分配给每一行的内部 DataTables 索引。此分配纯粹是顺序的:添加到表的第一行(来自 JSON 中的第一个数据对象)是索引 0 - 依此类推:

  "columnDefs": [ {
    "targets": 0,
    "render": function ( data, type, row, meta ) {
      return meta.row + 1;
    }
  } ]

您的示例中已经有一个targets: 0,因此添加它应该很简单。

当您排序和过滤时,分配的索引将坚持到行。

如果您想要一个在表中直观地表示行在哪里的索引,那就更复杂了(当然,使用服务器提供的数据是不可行的)。

【讨论】:

  • 这正是我想要的,谢谢!我真的需要提高我的 jquery 文档阅读技巧
  • 我忘了提一下,我认为使用这种方法,您需要将所有列定义从"columns" 移动到"columnDefs",因此可以为每个列定义正确的target。尝试确定。供参考,这里是渲染函数documentation
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多