Layui table 渲染空数组时不显示“暂无数据”是因为其仅在 parseData 返回的 data 为 [] 且 count 为 0 时触发提示;若 response 配置未对齐后端字段(如 dataName 错误)、parseData 未正确提取数据、done 回调干扰 DOM 或容器样式限制高度/溢出,均会导致提示失效。
layui table 渲染空数组时为什么不显示“暂无数据”
因为 layui.table 默认只在「请求成功但返回数据为空」且 data 字段为 [] 时才触发「暂无数据」提示,而接口返回空数组(如 {"code":0,"msg":"","data":[]})本身是成功的,但如果你的 response 配置没对齐后端结构,layui 就会认为“没拿到 data”,直接卡在加载状态或静默失败。
检查 response 和 parseData 配置是否匹配后端 JSON 结构
这是最常踩的坑:后端返回的是 {"data":[], "code":0},但你没告诉 Layui 哪个字段是真实数据,它就默认找 data 下的 data(即 res.data.data),结果读成 undefined,连空数组都算不上。
- 确认你的
response中dataName指向的是实际数据字段名,比如后端用list返回数组,就得写dataName: 'list' - 如果结构复杂(比如
{"result":{"items":[]}}),别硬调response,改用parseData手动提取:parseData: function(res){ return { code: res.code, msg: res.msg, count: res.total || 0, data: res.result?.items || [] }; -
parseData必须返回包含count和data的对象,缺一个,“暂无数据”就不会出现
确保 table.render 里开启了 done 回调并检查 data 状态
有时候看似配置对了,但表格还是不显示提示,大概率是 done 回调里做了干扰操作,比如手动清空了容器、重写了 tbody,或者用了 table.reload() 但没传新参数。
-
done函数里不要操作layui-table-body或直接innerHTML = '',这会破坏 Layui 内部的空状态判断逻辑 - 如果用了
table.reload(),确保每次调用都带完整参数,尤其url、where、page,否则可能复用旧缓存导致 data 未更新 - 调试时加一句:
done: function(res, curr, count){ console.log('table done:', res.data, count); }看res.data确实是[],且count是 0
自定义 emptyText 要配合 theme 和 CSS 一起生效
设了 emptyText: '啥也没有' 却没反应?那是因为 Layui 的空提示依赖两个条件:一是数据真为空,二是表格容器有足够高度撑开 .layui-table-box,否则文字被截或压扁看不见。
-
emptyText只在skin: 'line'或'row'下正常显示;如果用了skin: 'nob'(无边框),得额外加 CSS:.layui-table-view .layui-table-body .layui-table-empty { display: block; } - 表格容器父级不能设
overflow: hidden,否则空提示 div 被裁掉 - 如果用了
height固定高度,确保值 ≥ 120px,太小会导致空提示区域被压缩失效
parseData 返回的 data 是否为数组、长度是否为 0、count 是否为 0。只要中间任何一环被手动绕过或类型错配,提示就消失。真正卡住人的,往往不是配置项本身,而是后端字段名和前端解析之间那层薄薄的映射没对齐。











