parseData必须返回code、count、data三项,msg可选;code须为数字0表示成功,count须为有效整数,data须为数组(含空数组)。

直接用 parseData 钩子做字段映射,别试图在前端手动拼接或改写响应体——Layui 的 table.render() 在解析前会硬校验 res.data 是否存在且为数组,缺字段或类型错就直接空白,不报具体错误。
parseData 必须返回哪几个字段?
parseData 函数的返回对象里,code、count、data 三项缺一不可,msg 可选但建议保留(便于调试)。
-
code必须是数字:Layui 只认0表示成功,字符串"0"或布尔值都会被判定失败 -
count必须是有效整数:不能是undefined、null、NaN,否则分页栏消失、翻页失效 -
data必须是数组:哪怕空数组[]也行,但null或undefined会导致TypeError: Cannot read property 'length' of undefined
后端字段名五花八门,parseData 怎么写才不容易崩?
别写一堆 if (res.items) {...} else if (res.rows) {...},用可选链 + 空值合并更稳:
parseData: function(res) {
return {
code: res.status === 'success' ? 0 : 1,
msg: res.message || res.msg || '',
count: res.total ?? res.count ?? (res.data?.length || 0),
data: res.items ?? res.rows ?? res.data ?? []
}
}
关键点:
- 优先取语义明确的字段(如
total),再 fallback 到数组长度——但注意:res.data?.length是当前页数量,不能当总数用 - 如果后端真不返回总数,又必须开分页,只能设个大数(如
99999),并配合limits: [10, 20, 50]控制单页上限 - 所有取值操作都加
??或||,避免访问undefined的属性时报错中断
为什么开了 page: true 却只显示第一页?
本质是 count 解析失败:值为 0、NaN、undefined,或根本没进 parseData(比如忘了在 table.render() 里声明它)。
排查时盯死两点:
- 打开 Network 面板,点开接口响应,确认原始 JSON 里有没有类似
total或count的字段;再在parseData开头加console.log(res),看进来的结构对不对 - 检查
parseData的return语句是否真的执行了——常见错误是写了if分支但漏了else,导致某些情况下没return - 后端若对
page/limit参数做了非法校验(比如页码超限直接返回空数组 +total: 0),前端也会卡死在第一页
最易被忽略的是:Layui 的 parseData 不是“兜底转换”,而是唯一合法的数据清洗入口;绕过它去改 res 原对象、或在 done 回调里重赋值,都无效。


















