Layui表格要求后端返回code=0才视为成功,若返回200或"success"等需通过response.statusCode或parseData手动映射为0,并确保返回对象完整包含code、msg、count、data四字段,缺一则表格空白。
后端返回 code=200 或 success=true 时表格不渲染
layui 默认只认 res.code === 0 为成功,遇到 200、"success"、true 等状态值,直接跳过数据解析,表格空白且无报错。这不是 bug,是硬编码逻辑。
别在后端强行改状态码——很多项目已约定死 HTTP 200 + JSON body,改接口成本高、影响广。
-
response.statusCode可直接接管“什么算成功”,支持数字(如200)或布尔(如true) - 字段名不叫
code?用response.statusName指定,比如后端用status或success - 如果后端用
success: true,statusCode必须设为true,不能写字符串"true"
parseData 里手动映射 status 字段却仍失败
写了 parseData 却还是没数据?常见原因是:你只改了 code 字段的值,但没补全 Layui 强依赖的其他字段,比如 count 和 data。
parseData 不是“微调”,是完全替换解析逻辑——它返回的对象必须包含 code、msg、count、data 四个键,缺一不可。
- 后端没返回总数?别留空:
count: res.total ?? res.list?.length ?? 0 - 数据在
res.payload?.items里?别写res.items,要用可选链防崩溃 - 返回的是纯数组(如
[{id:1}])?必须包成对象:{ code: 0, msg: '', count: res.length, data: res }
response 和 parseData 能不能一起用
能,而且推荐一起用:用 response 解决“是否成功”的判断,用 parseData 解决“结构不对”的问题。两者职责不重叠,也不冲突。
典型组合场景:后端返回 {"status": 200, "hint": "ok", "total": 42, "rows": [...]}
response: { statusName: 'status', statusCode: 200, msgName: 'hint', countName: 'total', dataName: 'rows' }-
parseData可省略——因为字段名已对齐;但如果后端rows是嵌套在data里的,仍需parseData拆一层 - 注意:
response只改字段名和成功判定,不改结构层级;深层嵌套必须靠parseData
为什么 console.log(res) 看起来正常,但 data 还是 undefined
因为 Layui 在进入 parseData 前,会先按默认规则尝试读取 res.data 和 res.count。如果这两个字段不存在,它不会报错,而是静默设为 undefined,再把 undefined 传给 parseData 的参数 res。
所以你在 parseData 里看到的 res,可能已经是被 Layui “处理过”的半残对象,不是原始响应。
- 验证方式:在
beforeSend或用浏览器 Network 面板看原始响应体 - 真正可靠的入口只有两个:
response(改字段名/状态码)和parseData(彻底重写返回结构) - 别在
parseData里做异步操作,它必须同步返回完整结构,否则表格卡在 loading
















