layui表格总页数需手动计算为Math.ceil(res.count / limit),因后端必须返回count字段(非total),且须为数字类型;done回调中应自行计算而非依赖count参数,reload时需主动触发分页重算。

layui table 的 total 和 page 数据来源要分清
layui 表格本身不直接提供“总页数”这个字段,它只返回 total(总记录数)和当前 page(当前页码)、limit(每页条数)。总页数得自己算: Math.ceil(total / limit)。如果你在 done 回调里拿不到 total,大概率是后端没按 layui 要求返回。
后端响应必须包含 count 字段(不是 total)
layui 的分页逻辑依赖后端返回的 count 字段表示总数据量,不是 total —— 这是最多人踩的坑。即使你接口返回了 {"total": 123, "data": [...]},layui 也读不到,会默认 total = 0,导致页码栏异常或只显示第 1 页。
- 正确响应结构(JSON):
{"code": 0, "msg": "", "count": 123, "data": [...]} - 如果用的是自定义
response配置,必须显式映射:response: { count: 'total' },否则它不会自动识别你的字段名 -
count必须是数字类型,字符串如"123"会导致Math.ceil(count / limit)计算出错(变成NaN)
在 done 回调里安全获取总页数
done 是唯一能拿到 res.count、curr、count(注意:这个 count 是 layui 自动算出的总页数)的地方。但别信那个自动 count——它只是 Math.ceil(res.count / options.limit) 的结果,而 options.limit 可能被用户改过(比如切到“每页 50 条”),所以最稳的方式还是自己算。
- 推荐写法:
done: function(res, curr, count) {<br> var totalPages = Math.ceil(res.count / this.limit);<br> console.log('总页数:', totalPages);<br>} - 不要用
count参数值,它可能滞后(比如你在 reload 时传了新limit,但count还是上一次的) - 如果表格启用了
page: false,done里的count和curr都是undefined,此时只能靠res.count+ 手动查当前 limit
reload 时想动态更新总页数显示?得手动触发重绘
layui 不会因为 res.count 变化就自动刷新页码栏。如果你 reload 表格并换了条件(比如搜索后总数变了),但页码栏没更新,是因为 layui 没重新计算分页逻辑 —— 它只在初始渲染或用户点页码时才重算。
- reload 后强制刷新分页栏:
table.reload('yourId', { page: { curr: 1 } }),带page.curr就会触发重算 - 或者更彻底:先
table.clearCache(),再table.reload(),避免缓存的count干扰 - 如果用的是服务端分页,且后端返回的
count比上次小、但当前页码已超出范围(比如总共剩 2 页,却在第 5 页 reload),layui 默认不会跳回第 1 页,得自己判断:if (curr > totalPages) { table.reload({ page: { curr: 1 } }); }
count 字段是否实时准确,比前端怎么算更重要。


















