Layui表格显示“No data”主因是data字段非数组或为空,需检查响应结构、字段名一致性、请求状态、分页适配及DOM存在性。
检查 data 字段是否为数组且非空
layui 的 table.render() 默认要求后端返回的表格数据必须是数组,且直接挂载在 data 字段下(除非你显式配置了 response.dataname)。如果后端返回的是对象包裹结构(如 {code: 0, msg: "", data: [...]}),而你没改响应映射,layui 就会认为“没数据”,显示“no data”。
实操建议:
- 打开浏览器开发者工具 → Network → 找到表格请求 → 查看 Response 内容,确认顶层
data字段是否存在、类型是否为数组、长度是否 > 0 - 若后端返回结构不标准,在
table.render()中显式指定:response: {dataName: 'data'}(对应你的实际字段名) - 注意:如果后端返回的是字符串(比如 JSON 未被自动解析),
data会是字符串而非数组,此时需在done回调里手动JSON.parse(),或确保接口响应头为Content-Type: application/json
确认 cols 配置中 field 与后端字段名严格一致
Layui 表格靠 field 去匹配每行数据的属性。一旦大小写、下划线/驼峰不一致(比如后端返回 user_name,但 field: 'userName'),该列就会渲染为空——整行若所有 field 都不匹配,视觉上就像“没数据”。
实操建议:
- 用
console.log(data)打印第一行原始数据,逐个比对cols中每个field是否能取到值(例如row['user_name'] !== undefined) - 避免在
field中使用点号(如'user.name'),Layui 不支持嵌套取值;如需展示子字段,改用templet函数手动提取 - 若字段含特殊字符(如短横线
create-time),必须用方括号语法访问,此时field应设为'create-time',并在templet中写row['create-time']
排查 url 请求是否真正成功并触发渲染
“No data”有时根本不是数据问题,而是请求失败后 Layui 默认不报错、只静默渲染空表。比如 401 未登录、跨域被拦、URL 拼错、后端抛异常返回 500 —— 这些都会导致 data 为空数组或未定义。
实操建议:
- 在 Network 面板中确认该请求状态码是 200,且 Preview/Response 有内容;若状态码异常,优先解决服务端问题
- 给
table.render()加done: function(res, curr, count) { console.log('table done', res); },观察res是否为预期结构,还是{data: [], code: xxx, msg: 'xxx'} - 如果用了
where参数传参,检查是否因中文或特殊字符未编码,导致 URL 截断(如漏掉encodeURIComponent()),请求实际未发全
留意 page 配置与后端分页逻辑是否对齐
开启分页时,Layui 会自动携带 page 和 limit 参数。如果后端没按这两个参数做分页(比如用了 offset/size 或压根没处理),可能返回空数组或错误数据,导致“No data”。
实操建议:
- 查看 Network 中请求 Query String,确认含
page=1&limit=10;再查后端日志或调试接口,确认是否正确读取并应用了这两个参数 - 临时关闭分页测试:
page: false,看是否能正常渲染全部数据;若可以,问题一定出在分页适配 - 若后端分页字段名不同(如要
pageNum和pageSize),用request: {pageName: 'pageNum', limitName: 'pageSize'}重映射
最常被忽略的一点:Layui 表格初始化后,DOM 必须已存在且未被后续 JS 清空或替换。如果表格容器是异步加载的(比如用 $.load() 插入),要在插入完成后再调用 table.render(),否则它找不到目标 elem,也不会报错,只会静默失败。


















