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

如何将带分页信息的JSON响应与jQuery DataTable集成

问题分析

你的问题核心是DataTables服务端模式的默认参数/响应格式与你的API不兼容:

  • DataTables默认发送start(起始索引)、length(每页条数)等参数,但你的API需要page(页码,从0开始)、size(每页条数)
  • DataTables默认期望响应包含data(数据列表)、recordsTotal(总条数)、recordsFiltered(过滤后条数),但你的API返回的总条数字段是totalElements
解决方案

1. 调整DataTables配置,适配API规则

替换原有dataTable配置,修改参数传递和响应解析逻辑:

$("#k_table_1").dataTable({
    "processing": true,
    "serverSide": true,
    "ajax": {
        "url": "myAjaxUrl",
        "type": "GET",
        "data": function(d) {
            // 将DataTables的分页参数转换为API需要的page、size
            d.page = Math.floor(d.start / d.length); // start=0对应page=0,符合API规则
            d.size = d.length;
            // 移除DataTables默认的无用参数(可选,依API要求调整)
            delete d.start;
            delete d.length;
            // 如需支持排序,可在此处理order数组,转换为API的sort参数格式
        },
        "dataSrc": function(json) {
            // 给DataTables传递总条数信息
            json.recordsTotal = json.totalElements;
            json.recordsFiltered = json.totalElements;
            // 返回当前页数据列表
            return json.data;
        }
    },
    "columns": [
        {"data": "column1"}, // 新版推荐用data替代旧版mDataProp
        {"data": "column2"},
        {"data": "column3"},
        {"data": "column4"},
        {"data": "column5"},
        {"data": "column6"},
    ],
    "order": [[5, "desc"]]
});

2. 修改服务端代码,动态接收分页参数

你的服务端当前固定调用page=0&size=10,需改为接收前端传递的参数并动态请求API:

// 接收前端传递的page和size参数(依后端框架调整,如Spring用@RequestParam)
int page = request.getParameter("page") != null ? Integer.parseInt(request.getParameter("page")) : 0;
int size = request.getParameter("size") != null ? Integer.parseInt(request.getParameter("size")) : 10;

List<UserBean> aaData = new ArrayList<UserBean>();
JSONObject ResponseJson = new JSONObject();
// 动态拼接API请求地址
ResponseJson = callApi("http://XX.XX.XX.XXX:8080/getData?size=" + size + "&page=" + page);
aaData = getUsersList(ResponseJson);

// 关键:必须将API返回的完整JSON(含totalElements等分页信息)返回给前端,不能只返回数据列表

3. 验证关键点

  • 打开浏览器Network面板,确认前端请求参数包含page和size,且切换分页时参数值正确(如第二页对应page=1)
  • 检查后端返回的响应,确保包含data(当前页数据)、totalElements(总条数)两个核心字段
常见排查点
  • 若分页仍不显示,检查totalElements值是否正确,以及DataTables的recordsTotal/recordsFiltered是否被正确赋值
  • 若排序失效,需在data函数中把DataTables的order参数转换为API支持的排序格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:15:01