loading: false 是唯一可靠关闭方式,能彻底不渲染 loading dom 节点;手动 remove 或 layer.closeall 会破坏状态,layer.load() 必须保存并传入返回索引关闭。

loading: false 是唯一可靠关闭方式
表格初始化或 reload 时,设 loading: false 就能彻底不渲染 loading DOM 节点——不是“隐藏”,是压根不生成。这是唯一不会出错的关闭手段。
常见错误是以为 loading: true 后再用 jQuery 去 $(".layui-table-loading").remove(),这会破坏 Layui 内部状态,reload 时可能报错或空白。
- 只在明确不需要任何加载提示时用它(比如数据本地缓存、秒出)
- 若只是想换图标或文字,别关,改
loading: '<i class="..."></i> 自定义' - 搭配
url使用时,loading: false仍生效;但没配url时本就不会触发 loading,设它没意义
为什么 layer.load() 关不掉?因为你没存索引
如果你在 table.render() 外层手动调了 layer.load(),那表格自身 loading 状态和它完全无关。关不掉的根源,90% 是没保存返回值。
layer.load() 返回一个数字索引(如 12345),不是 DOM,也不能靠 class 查找。这个值必须在 done 或 error 回调里原样传给 layer.close()。
- 别写
layer.closeAll('loading'):会误杀其他模块的 loading - 别在
beforeSend里存变量却忘了提升作用域,导致done中访问不到 - 如果用了
table.reload(),记得每次都要重新调layer.load()并存新索引——旧索引已失效
reload 时 loading 没反应?先看 Network 是否发出了请求
Layui 的 loading 动画只在真实发起网络请求时才出现。如果 table.reload() 后 loading 消失或压根不闪,大概率是请求根本没发出去。
打开浏览器 Network 面板,点分页或 reload 按钮,观察是否有新请求。没有的话,检查这些硬性条件:
-
table.reload()调用时是否传了url参数(哪怕和初始化一样也要显式带上) -
where参数里有没有非法字段导致后端拦截(比如空字符串、null) -
request.pageName和后端实际接收的分页参数名是否一致(常见错写成pag而非page) - 后端返回格式是否匹配
response配置(例如你设了statusCode: 0,但后端返回的是code: 200)
自定义 loading 文字每秒变化,不能靠 done 回调
done 是数据渲染完才触发,此时 loading 早就自动消失了。真要实现“加载中…”→“加载中.”→“加载中..”这种动态效果,必须从请求发出阶段介入。
利用 request.beforeSend 启动定时器,在 AJAX 请求发出后立即更新 DOM 文字;在 done 或 error 中清除定时器并隐藏容器。
- 不要往
#tableId内部插 loading 元素,插到它的父容器(.layui-table-view)里更稳 - 别依赖
$(".layui-table-loading").length判断状态——这个节点在 reload 后已被销毁 - 如果用了多个表格,每个都要独立管理自己的定时器变量,避免互相覆盖
loading: true,只要请求没走通,它就永远不会出现——这不是 bug,是设计逻辑。











