layui table 的 method 参数仅支持 GET/POST 字符串,但默认以表单格式提交;要发 JSON,必须绕过自动参数拼接,通过 request 配置分页字段、parseData 适配响应结构,并用 fetch/axios 手动发起 JSON 请求,再以 data 和 count 填充表格。

layui table 的 method 参数只支持 GET 和 POST 字符串,但不直接支持 JSON 提交
layui 2.8+ 的 table.render() 确实允许设 method: 'post',但这只是让请求用 POST 方法发出去,**默认仍以 application/x-www-form-urlencoded 格式提交键值对**(如 page=1&limit=10),不是 JSON。想发 JSON,必须绕过 layui 内置的参数拼接逻辑。
用 request 和 parseData 拦截并重写请求流程
核心是放弃 layui 自动组装参数,改用 request 手动发起 fetch 或 axios 请求,并在 parseData 中适配返回结构。这是唯一稳定可控的方式。
常见错误现象:直接设 method: 'post' + contentType: 'application/json'(layui 不识别该配置项),结果请求体仍是表单格式,后端收不到 JSON。
- 必须显式设置
request: { pageName: 'page', limitName: 'limit' },否则 layui 无法从响应中提取分页字段 -
parseData必须返回含code、msg、count、data四个字段的对象,否则表格渲染失败 - 若后端返回字段名不匹配(如
total而非count),要在parseData里做映射
table.render({
elem: '#demo',
url: '/api/list',
method: 'post', // 仅用于触发 POST,实际不生效
request: {
pageName: 'page',
limitName: 'limit'
},
parseData: function(res) {
return {
code: res.code === 0 ? 0 : 1,
msg: res.message,
count: res.total,
data: res.data
};
},
// 关键:用 done 替代 url 发起自定义请求
done: function(res, curr, count) {
// 避免首次加载重复请求,只在用户操作(翻页/搜索)时触发
if (curr !== 1 || this.config.where || this.config.page) return;
// 手动 POST JSON
fetch('/api/list', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
page: 1,
limit: 10,
keyword: ''
})
}).then(r => r.json()).then(data => {
table.reload('demo', {
data: data.data,
count: data.total
});
});
}
});
更推荐:用 table.reload() 主动控制请求时机和载荷
把请求完全交给 JS 控制,比在 done 里 hack 更清晰。尤其适合带搜索、筛选等动态参数的场景。
使用场景:需要传复杂嵌套对象、数组,或需添加认证 token、加密字段等。
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
- 初始渲染时设
url: null,避免自动加载 - 首次加载、翻页、搜索都调用
table.reload(),并在where中传原始 JSON 对象(layui 会把它序列化进请求体) - 但注意:
where在method: 'post'下仍走表单编码 —— 所以还得配合beforeSend拦截(需改源码)或直接弃用url改用data静态加载
真正干净的做法是:**彻底不用 layui 的自动请求,全部由外部 fetch/axios 处理,再用 data 和 count 填充表格**。这样 JSON 格式、header、错误重试全由你掌控,反而更简单。
容易被忽略的点:分页参数位置和后端约定
很多人卡在“明明发了 JSON,后端却收不到 page/limit”。原因往往是:layui 默认把分页参数放在 URL 查询字符串里(GET)或请求体表单里(POST),而你发 JSON 时没把它们塞进 JSON body。
必须确保 JSON body 中包含分页字段(如 {page: 1, limit: 10, ...}),且后端解析逻辑与之匹配。不能依赖 layui 自动注入 —— 它只在原生 POST 表单模式下才注入。
如果后端要求分页参数在 URL(如 /api/list?page=1&limit=10),而业务数据又要 JSON body,那就得用 GET + contentType 伪造成 JSON(不规范,慎用),或者让后端支持混合接收方式。










