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

Datatables 1.11.50:如何通过AJAX分批加载并追加数据到现有表格

Datatables 分批加载实现方案

针对你的需求(Datatables 1.11.50,先加载部分数据供用户操作,后台分批追加剩余数据,前端完成排序/搜索),以下是具体实现步骤:

一、后端接口调整

后端只需提供支持分页参数的接口,无需复杂逻辑——你的MySQL查询本身仅需6秒,分页查询只会更快。接口需要接收两个参数:

  • page:当前批次页码
  • size:每批次加载的行数(比如200或500)

接口返回格式示例:

{
  "total": 11234, // 总数据行数
  "data": [/* 当前批次的行数据,与列定义字段对应 */]
}

二、前端核心实现

1. 初始化Datatables(优先渲染首批数据)

初始化时先加载第一批次数据,同时开启延迟渲染、前端排序等关键配置,保证首次加载速度:

// 初始化表格
const table = $('#your-table-id').DataTable({
  data: [], // 初始空数据,后续填充
  columns: [
    // 替换成你的40-45列定义,比如:
    { data: 'user_name', title: '用户名' },
    { data: 'order_date', title: '下单日期' },
    // ... 其他列
  ],
  deferRender: true, // 仅渲染可见区域行,大幅提升大表格性能
  ordering: true, // 开启前端排序
  searching: true, // 开启前端搜索
  paging: false, // 不需要前端分页(所有数据最终都加载到前端)
  scrollY: '700px', // 固定表格高度,滚动查看,避免DOM过多
  scrollCollapse: true,
  language: {
    loadingRecords: '加载中...' // 自定义加载提示
  }
});

// 加载首批数据
loadDataBatch(1, 500); // 第一页,每页500行

2. 分批加载与数据追加逻辑

写一个递归加载函数,每次加载完成后追加数据到表格,同时控制请求间隔避免服务器压力:

let currentPage = 1;
const batchSize = 500;
let totalCount = 0;

function loadDataBatch(page, size) {
  $.ajax({
    url: '/your-api-url',
    method: 'GET',
    data: { page, size },
    beforeSend: function() {
      // 可选:显示后台加载提示(比如表格底部的"正在加载更多数据...")
      $('#loading-tip').show();
    },
    success: function(res) {
      totalCount = res.total;
      // 追加数据到表格,draw(false)保留当前排序/搜索状态
      table.rows.add(res.data).draw(false);

      // 判断是否还有剩余数据需要加载
      const loadedRows = currentPage * size;
      if (loadedRows < totalCount) {
        currentPage++;
        // 延迟200ms加载下一批,避免连续请求
        setTimeout(() => {
          loadDataBatch(currentPage, size);
        }, 200);
      } else {
        // 全部加载完成,隐藏提示
        $('#loading-tip').hide();
      }
    },
    error: function(err) {
      console.error('批次加载失败:', err);
      // 可选:重试当前批次或提示用户
      $('#loading-tip').text('加载失败,点击重试').click(() => loadDataBatch(page, size));
    },
    complete: function() {
      // 可选:隐藏单个请求的加载提示
    }
  });
}

3. 用户体验优化

  • 页面初始化时,表格区域显示“加载首批数据中...”,首批数据加载完成后自动替换为表格
  • 在表格底部添加固定提示栏,显示当前加载进度(比如“已加载500/11234条数据”)
  • 如果浏览器内存占用过高(11000行+40列数据),可以减小batchSize到200,或者开启scrollY固定高度减少DOM渲染量

三、关键注意事项

  • 排序/搜索连贯性:必须用draw(false)追加数据,否则会重置用户已经进行的排序、筛选操作
  • 前端性能:开启deferRender是核心,它能让Datatables只渲染视口内的行,避免一次性渲染11000行DOM导致卡顿
  • 服务器压力:通过200ms的请求间隔,以及单批次500行的小数据量,服务器压力会远低于单次加载11000行,完全不用担心
  • 异常处理:一定要添加错误重试逻辑,避免因网络波动导致加载中断
  • 字段匹配:确保columns中的data属性与后端返回的字段完全一致,否则会出现列数据为空的问题

内容的提问来源于stack exchange,提问作者Mm-Art-In

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:25:31