必须显式调用 table.reload() 并传入完整 where 对象和 page: { curr: 1 },where 需动态构建、字段名与后端一致、空值不传,url/token 等配置也须在 reload 中传入。

必须用 table.reload() 显式传 where 对象,且每次都要重置 page.curr = 1,否则参数根本不会发给后端,或搜出空结果。
where 必须是对象,不能写死值或漏掉字段名
你不能写 where: { keyword: $('#kw').val() } 然后指望它自动更新——这个值只在初始化时取一次。reload 时如果没传新的 where,就等于发了个空对象,后端收不到任何搜索条件。
- 正确做法:在点击按钮、下拉变化等事件里,实时组装对象再 reload,例如:
table.reload('userTable', { where: { q_name: $('#kw').val().trim(), status_code: $('#status').val() } }) - 字段名必须和后端接口一致(比如后端要
q_name,你就不能只传name) - 别把整个表单对象直接塞进去,
where里只放后端真正需要的字段,多余字段可能触发 SQL 错误或缓存异常
空值不传,否则后端可能查“空字符串”
用户没输关键词、状态选了“全部”,但你把 { keyword: '', status: '' } 塞进 where,后端很可能当成明确查询空值,而不是“不限制”。
- 动态构建
where:先声明空对象,再按需添加非空值,例如:const w = {}; if (val) w.q_name = val; if (status) w.status_code = status; - 下拉框“全部”建议设
value=""或null,然后统一用if (v)过滤 falsy 值 - 日期控件返回
"2024-01-01",但后端要"2024/01/01"?得先格式化再塞进where
page.curr 必须显式设为 1,否则还在第 5 页搜
用户在第 5 页点了搜索,table.reload() 不带 page: { curr: 1 },请求仍带 page=5,后端返回空数组,表格显示「第 5 页 / 共 0 页」——这是最常被忽略的视觉错乱。
- 只要涉及搜索、筛选、重置,就必须加
page: { curr: 1 } - 别依赖
tableIns.config.page.curr读当前页——它可能还没更新,直接写死{ curr: 1 }最稳妥 - 老版本 Layui(2.5.6 之前)对
page.curr处理有 bug,建议升级到 2.8+ 或手动加该配置
换 URL、改请求方式、加 token 都得在 reload 里传
想根据条件切接口地址?别碰 tableIns.config.url = 'xxx',这个属性是只读快照,改了也不生效。
- 换地址必须走
table.reload('id', { url: '/api/orders/pending', where: {}, page: { curr: 1 } }) - POST 模式下,后端需支持解析原始 JSON(如 Express 要配
bodyParser.json()) - 要加 token 或时间戳?用
request配置接管请求,不要拼 URL 字符串,例如:request: function(obj) { return $.ajax({ url: obj.url, data: $.extend({}, obj.where, { token: localStorage.getItem('token') }) }); }
最易被忽略的是:where 的构建时机和 page.curr 的重置逻辑不是“可选优化”,而是每次 reload 的必填项;漏掉任何一个,前端表现就和预期脱节,且问题往往藏在 Network 请求里,不容易一眼看出。











