layui表格仅认res.code === 0为成功,其他值(含200、"success"、true)均空白渲染;必须通过parsedata统一映射code为数字0、补全count、data为数组,并在reload时显式重传parsedata配置。

layui表格为什么遇到res.code !== 0就空白渲染
Layui表格硬编码只认res.code === 0为成功,其他值(包括200、"success"、true)一律跳过解析,不报错也不提示,直接留白。这不是bug,是设计如此——它不走HTTP状态码,只盯JSON里的code字段值是否严格等于数字0。
常见错误现象:后端返回{"status": 200, "data": [...]},表格转圈后空着;或返回{"success": true, "list": [...]},控制台静默,Network里响应明明200,页面却没数据。
- 必须确保
code是数字类型,"0"字符串也会失败 -
parseData函数里别漏return,否则整个解析中断,表格空白 - 别在
response配置里填statusCode: 200就想绕过——它只对res.code字段生效,且仍要求值为0
用parseData统一转换各种非0状态码
parseData是唯一能兜住所有混乱状态标识的入口。它在收到响应后立即执行,你得手动把任意结构映射成Layui要的四字段格式:code、msg、count、data。
关键点在于code必须是数字0才被识别为成功,其他都算失败。别用!!res.success,它会把false、""、null全转成0,导致误判。
- 正确写法:
code: res.status === 'success' ? 0 : 1或code: res.code === 0 ? 0 : 1 - 如果后端用布尔值:
code: res.success === true ? 0 : 1 - 如果后端用HTTP码:
code: res.httpCode === 200 ? 0 : 1 -
msg字段建议 fallback:msg: res.message || res.msg || ''
reload时parseData容易失效的坑
调用table.reload()重载表格时,如果原始render()没传parseData,哪怕你只改了where参数,reload也会退回到默认解析逻辑——此时后端返回非0状态码,表格立刻空白。
这不是reload的bug,是Layui的设计:它不继承上一次的parseData,必须显式重传。
- reload时务必带上完整配置:
parseData: function(res) { /* 同render时一致 */ } - 别只写
where和page,漏掉parseData就等于放弃状态码适配 - 如果多个表格共用同一套解析逻辑,抽成变量复用,避免手误漏写
后端没返回count字段时怎么保分页不崩
当parseData里count为undefined或null,Layui分页栏直接消失,页码控件变灰,但控制台无提示——这是最隐蔽的失败点。
哪怕后端只返回列表数据(如{"list": [...]}),你也得在parseData里补上count,否则分页逻辑完全失效。
- 安全 fallback:
count: res.total ?? res.count ?? (res.list?.length || 0) - 如果后端真不提供总数,只能设固定值:
count: 99999,并配合limits: [10, 20, 50]限制用户选大页码 -
data字段必须是数组:data: res.list ?? res.items ?? [],空数组也比undefined强
复杂点在于:parseData里四个字段缺一不可,且code和count类型稍有偏差,表格就彻底沉默。没人告诉你哪里错了,只能自己盯住返回对象结构。











