You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataTable v2.0.6空数据返回时初始化异常,加载状态无法消除

DataTables 2.0.6 升级后问题解决:加载状态无法结束、自定义下拉框无法插入

一、表格一直处于加载状态的问题

核心原因

DataTables 2.0+ 对服务端模式(serverSide: true)的draw参数校验变得严格:前端发起请求时会自动生成递增的draw值(从1开始),后端必须返回与请求完全一致的draw值,否则表格会判定请求未完成,持续显示加载状态。

你的后端返回固定draw: 0,不符合2.0版本的要求——v1.10对这个参数的校验较宽松,所以之前能正常工作。

解决方法

修改后端逻辑,将前端请求中的draw参数原封不动返回,比如:
如果前端请求的draw是1,后端返回:

{"draw":1,"recordsTotal":0,"recordsFiltered":0,"data":[]}

额外建议:更新配置为DataTables 2.0标准命名

旧版本的配置前缀(sDom、bSort、bSortable、mRender、sClass)虽然兼容,但推荐换成2.0的标准命名,避免潜在兼容问题:

  • sDom → dom
  • bSort → ordering
  • bSortable → orderable
  • mRender → render
  • sClass → className

二、init.dt事件中下拉框无法添加到表格顶部的问题

核心原因

  1. DOM结构变化:DataTables 2.0重构了表格容器的DOM结构,你原来的选择器#tableId_wrapper .filter .selection对应的元素不存在。
  2. HTML语法错误:插入的<option>标签未正确闭合(<option value="option1"></option<option>少了</option>)。

解决方法

  1. 修正DOM选择器:通过浏览器控制台查看表格容器的实际结构,2.0版本顶部操作栏通常在.dt-top-container或.dt-top-row下。示例代码改为:
$("#tableId").on("init.dt", function() {
  // 插入到顶部操作栏的最前面
  $("#tableId_wrapper .dt-top-row").prepend(`
    <div class="filter">
      <div class="selection">
        <select>
          <option value="" selected>Select</option>
          <option value="option1">Option 1</option>
          <option value="option2">Option 2</option>
        </select>
      </div>
    </div>
  `);
});
  1. 修正HTML语法错误:确保所有标签正确闭合,避免解析异常。

可选优化:改用draw.dt事件

如果init.dt触发时机不符合预期,可以换成draw.dt事件(表格每次绘制完成都会触发),确保DOM元素已完全生成。

修改后的完整初始化代码示例

window.tableInit = function() {
  var $table = $('#tableId').DataTable({
    paging: true,
    serverSide: true,
    searching: true,
    pageLength: 10,
    responsive: true,
    processing: true,
    pagingType: 'simple_numbers',
    lengthMenu: [[5, 10, 25, 50], [5, 10, 25, 50]],
    ajax: { url: 'url here', type: 'POST' },
    columns: [
      { data: 'id' },
      { data: 'image' },
      { data: 'name' },
      { data: null }
    ],
    dom: 'dom structure', // 替换为你的实际DOM结构,比如'lfrtip'
    ordering: true,
    columnDefs: [
      { width: '5%', targets: 0 },
      { width: '20%', targets: 1 },
      { width: '50%', targets: 2 },
      { targets: [1, 2], orderable: false },
      { responsivePriority: 1, targets: 0 },
      { responsivePriority: 2, targets: -1 },
      {
        targets: -1,
        data: null,
        render: function(data, type, full) {
          return `<div>
                    <button class="btn btn-success btn-order" title="Select">
                      <i class="fa fa-search"></i>
                    </button>
                  </div>`;
        },
        orderable: false,
        className: 'dtActionCls'
      }
    ]
  }).columns.adjust().responsive.recalc();
    
  return $table;
}

var $listTable = tableInit();

$("#tableId").on("init.dt", function() {
  $("#tableId_wrapper .dt-top-row").prepend(`
    <div class="filter">
      <div class="selection">
        <select>
          <option value="" selected>Select</option>
          <option value="option1">Option 1</option>
          <option value="option2">Option 2</option>
        </select>
      </div>
    </div>
  `);
});

内容的提问来源于stack exchange,提问作者heero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:53:12