Layui表格只认code===0为成功,其他值均触发error回调并停止渲染;必须用parseData将后端任意code映射为0或1,并确保count为数字、data为数组,否则分页失效或显示“暂无数据”。

后端返回 code 不是 0,Layui 表格直接报错不渲染
Layui 表格只认 code === 0 为成功,其他值(哪怕 code === 200 或 code === 1)都会触发 error 回调、停止渲染、显示“数据接口请求异常”。这不是 bug,是硬性约定。
常见场景:Spring Boot 默认用 code: 200 表示 HTTP 成功;Go/gin 或 .NET 返回 status: 1;前端对接多个系统时各有一套状态码体系。
- 别改后端——尤其已有联调系统或第三方 API,强行统一 code=0 可能破坏原有契约
- 必须用
parseData做状态映射,把任意后端 code 转成 Layui 要的code: 0或code: 1 -
parseData是唯一可靠出口,response配置无法处理 code 映射
示例(后端返回 { "status": 200, "msg": "ok", "total": 42, "list": [...] }):
parseData: function(res) {
return {
code: res.status === 200 ? 0 : 1, // 关键:转成 Layui 认的 0/1
msg: res.msg || '',
count: res.total || 0,
data: res.list || []
};
}
parseData 里 count 或 data 提取错,分页栏消失
即使 code 对了,count 缺失或 data 不是数组,分页控件照样不出现——它连“第 1 页 / 共 0 页”都不会渲染。
典型错误:
- 后端字段叫
totalCount,你写count: res.totalCount,但 res 里实际是{ result: { totalCount: 100 } },结果res.totalCount === undefined -
data字段嵌套两层:res.data.items,但你直接写data: res.data,导致data是对象而非数组 - 忘了加空值 fallback:
data: res.list || []没写,当res.list为null时,data变成null,Layui 拒绝渲染
安全写法(带防御):
parseData: function(res) {
return {
code: res.code ?? res.status ?? 0 === 0 ? 0 : 1,
msg: res.message || res.msg || '',
count: res.totalCount || res.total || res.count || res.data?.length || 0,
data: Array.isArray(res.list) ? res.list :
Array.isArray(res.data?.items) ? res.data.items :
Array.isArray(res.data) ? res.data : []
};
}
分页参数传错,后端收不到 pageNum/pageSize
开启分页后,Layui 默认发 page 和 limit 参数。如果你后端要的是 pageNum 和 pageSize,但没配 request,请求里就永远没有这两个字段——后端只能查全量。
注意点:
-
request必须和后端 Controller 参数名完全一致,包括大小写:pageNum≠pagenum - Spring Boot 的
@RequestParam Integer pageNum必须匹配前端传的 key,否则参数为 null - MyBatis-Plus 的
IPage构造器默认也只认current和size,不是page/limit
配置示例:
request: {
pageName: 'pageNum', // 后端 @RequestParam String pageNum
limitName: 'pageSize' // 后端 @RequestParam String pageSize
}
done 回调里误操作导致“暂无数据”不显示
空数据时本该显示“暂无数据”,但你写了 done 回调却手动清空了表格容器,或者重写了 tbody,Layui 就再也检测不到空状态。
真正该做的事只有两件:
- 用
console.log(res)确认res.data确实是[]、res.count确实是0 - 检查容器是否被 CSS 截断:
layui-table-box高度不能为 0,overflow: hidden会藏掉提示文字
别在 done 里做这些事:
$('#myTable').html('')layui.table.cache['myTable'] = []- 调用
table.reload()却漏传where或page,导致缓存未更新
如果真要干预 DOM,等 Layui 渲染完再用 setTimeout(() => { ... }, 0) 延迟执行,避开内部状态判断时机。


















