where必须是函数以获取实时值,空值需主动过滤,搜索时须reload并重置curr为1,动态换接口需在reload中传url参数,且字段名、请求方式须与后端严格一致。

where 必须是函数,不能写死对象
直接写 where: {name: $('#search-name').val()} 是无效的——这个值只在初始化时取一次,后续输入变化完全不会更新。Layui 每次 reload 都会重新执行 where 函数,所以必须让它返回实时值。
正确写法:where: () => ({q_name: $('#search-name').val().trim(), status: $('#status-select').val()})
- 空值要主动过滤:比如
$('#search-name').val().trim()为空时,整个字段不该传给后端,除非接口明确要求传空字符串 - 别在函数里调用
table.reload(),否则触发无限循环 - 多个搜索框建议统一收口到一个对象里再
return,避免零散取值出错
搜索按钮 click 事件里必须显式 reload 并重置 curr
表格本身不监听外部输入框,点搜索按钮后必须手动触发刷新,且页码要归 1,否则可能搜出“空结果”(实际数据在第 2 页但你还在看第 5 页)。
用实例方法:tableIns.reload({ where: {}, page: { curr: 1 } })
用静态方法:table.reload('tableId', { where: {}, page: { curr: 1 } })
- 别漏掉
page: { curr: 1 },这是最容易被忽略却最常导致“搜不到”的原因 - 如果用了分页,
curr不能为undefined,建议兜底写成curr: tableIns.config.page.curr || 1
后端收不到参数?先查请求方式和字段名
Layui 默认用 GET 发请求,所有 where 字段都拼在 URL 上。如果你看到请求地址里没参数,大概率是字段名或编码出了问题。
- 检查浏览器 Network 标签页里实际发出的 URL,确认 key 名是否和后端约定一致(比如是
q_name还是name_like) - 中文或特殊字符没编码?确保前端没手动拼 URL,全部交给
where对象处理 - 后端用
@RequestParam接收时,GET 请求的参数必须匹配 URL 中的 key;如果是 POST + JSON,需额外配置contentType: 'application/json'和method: 'POST'
动态换接口必须在 reload 中传 url 参数
如果不同搜索条件要走不同后端接口(比如“用户搜索”走 /api/user/search,“订单搜索”走 /api/order/list),不能靠初始化时的 url 配置硬切。
必须在 reload 时显式传入:url: '/api/order/list',否则仍会沿用初始 URL。
-
url参数优先级高于初始化配置,且仅对本次请求生效 - 若同时传
url和where,注意后端是否支持该接口接收这些字段(比如新接口可能要求字段名为keyword而非q_name) - 别把
url写进where函数里——它只负责参数,不负责路径
where 当静态快照用,或者忘了 curr: 1 这一行。











