table.reload 必须显式传 url 和 where,否则刷新无效;需显式传 page 保持当前页码;定时器应外部创建并清除;done 回调中校验响应有效性;token 需每次读取最新值;表格必须用 id 初始化才能 reload。
table.reload 必须显式传 url 和 where,否则刷新无效
很多人调用 table.reload() 后数据没变,不是后端没响应,而是漏传了关键参数。layui 的 reload 不继承首次 table.render() 的配置,哪怕只少一个 url,请求就会发到 / 或空地址;漏传 where 则可能沿用旧条件或发空对象,导致数据“看起来没更新”。
-
url必须写,哪怕和初始化时完全一样 -
where建议每次重生成,尤其含 token、时间戳、搜索关键词时——缓存旧值会导致接口返回旧数据 - 带分页的表格,想保持当前页码,必须显式传
page: { curr: tableIns.config.page.curr },不传就默认回到第 1 页
定时刷新别在 done 里直接 setInterval(table.reload, …)
在 table.render() 的 done 回调里写 setInterval(table.reload, 5000) 是典型错误:每次渲染都会新建一个定时器,旧的不清除,最终内存泄漏 + 请求乱序 + 表格反复闪动。
- 定时器应只创建一次,放在
table.render()外部,比如页面加载完后 - 用变量存住定时器 ID(如
let timer = setInterval(...)),出错时能手动clearInterval(timer) - 高频刷新(≤10 秒)建议加节流:用布尔标志位记录上一次请求是否完成,未完成则跳过本次
接口异常时 reload 不会自动中断,得靠 done 回调兜底
table.reload() 的 error 回调并不可靠——网络超时、401、跨域失败等场景下它常不触发,但 done 仍会执行。若不做校验,就会用空响应或错误结构重绘表格,导致空白或勾选状态丢失。
- 务必在
done里检查响应有效性:if (!res.data || res.code !== 0) { layer.msg('刷新失败'); clearInterval(timer); return; } - token 过期不能硬编码在
where里,每次reload前从localStorage读一次最新值 - 如果表格启用了多选,还要同步还原
temp_all_list中的已勾选项,否则刷新后全丢
用 id 初始化表格,否则 reload 找不到实例
没在 table.render() 里配 id 参数,table.reload('xxx') 就永远失效。Layui 不靠 elem 或 lay-filter 匹配实例,只认你显式声明的 id 字符串。
- 初始化必须写:
table.render({ elem: '#userTable', id: 'userTable', url: '/api/user' }) - 后续所有
reload都要基于这个id:要么用tableIns.reload({...})(推荐),要么用table.reload('userTable', {...}) - 如果实例是局部变量,记得挂到全局(如
window.tableUserIns = table.render(...)),否则定时器里访问不到
reload 都得手动同步 page、where、token、勾选项——这些细节漏掉任何一环,用户就会看到“明明点了保存,列表却没变”。


















