Layui table.render设POST请求需同时配置method: 'post'、headers: {'Content-Type': 'application/json'}及request中pageName/limitName,否则因格式不匹配报415;page.limits须销毁重绘才生效;done回调参数为(res, curr, count),非obj。

table.render 怎么设 POST 请求
直接在 table.render() 配置里加 method: 'post',但光写这行不够,后端不认 JSON 就会报 415。Layui 默认把参数拼成 query string 发,而多数 REST 接口要的是 Content-Type: application/json。
必须同步配 headers 和 request,否则参数名、格式、编码全错:
-
method: 'post'告诉 Layui 用 POST 方法发请求 -
headers: {'Content-Type': 'application/json'}强制设请求头,不然默认是application/x-www-form-urlencoded -
request里改pageName和limitName—— 后端分页参数名不是page/limit的话,这俩不配就发错字段 - 别写
where: {},它会覆盖request生成的 data,导致分页参数丢掉
为什么设了 method: 'post' 还 415?
415 错误本质是后端拒绝接收当前请求体格式。Layui 在 method: 'post' 下默认仍用表单编码(application/x-www-form-urlencoded)发数据,但你写了 headers: {'Content-Type': 'application/json'},前后不匹配。
真正生效的发送逻辑是:Layui 把 request 里的 pageName、limitName 和你传的 where 合并成一个对象,然后调用 JSON.stringify() —— 但这一步只在 headers 明确为 application/json 时触发。
所以踩坑点很集中:
- 漏写
headers,或写成Headers(大小写敏感) -
request.pageName写错,比如后端要pageNum,你写成page,结果发过去是{"page":1,"limit":10},后端解析失败 - 后端用 Spring Boot 且没配
@RequestBody接收对象,或用了@RequestParam却收 JSON 字符串
page.limits 下拉选项怎么动态改
page.limits 是纯前端控制下拉值的唯一配置,但它不支持运行时 reload 修改 —— table.reload() 传新 limits 完全无效。
想换选项只能销毁重绘:
- 先调
table.destroy('demo'),ID 必须和render时的容器 ID 或lay-id一致 - 再调
table.render(),里面带新page: { limits: [5, 20, 100], limit: 20 } - 如果表格绑了外部事件(比如工具栏按钮 click),
destroy()不会自动解绑,得手动清理再重绑 - 别用
limits: [15],它渲染出一个“不可点击的下拉”,UI 表现异常
done 回调里拿不到当前页码?
很多人在 done 里写 console.log(obj.curr) 报错,因为 done 的参数顺序是 (res, curr, count),没有 obj。这是和 laypage.render 的 jump 回调混淆了。
table.render 的 done 只有三个参数:
-
res:原始响应体,结构取决于你parseData怎么处理,不是固定有data字段 -
curr:当前页码数字,不是字符串 -
count:总条数,来自parseData返回的count字段
常见错误是没看返回结构就直接写 res.data.records,结果 res.data 是 undefined。建议第一句写 console.log(res) 确认真实结构。


















