layui table 的 request.url 请求需重写 request 函数手动发起带 token 的 ajax 请求;必须显式传入 obj.page、obj.limit 和 obj.where 以保留分页与搜索参数,并从 localstorage 安全读取 token,同时处理 401 跳转登录。

layui table 的 request.url 请求如何携带 Token
layui 的 table.render() 默认走 AJAX,但不直接暴露 headers 配置。Token 无法通过 header 注入,必须改用 request + response 自定义请求逻辑。
- 原生
headers参数在 layui 2.8.x 及之前版本完全不支持(不是遗漏,是设计如此) - 必须覆盖
request方法,把 Token 放进 URL 查询参数 或 用$.ajaxSetup()全局注入(不推荐) - 更稳妥的做法:在
request中调用$.ajax()手动发请求,并显式传入headers: { Authorization: 'Bearer xxx' }
重写 request 函数时怎么保留分页参数
layui 会自动往 request 传入 page 和 limit,你得手动把它们拼进请求体或 URL,否则后端收不到分页信息。
-
request是一个函数,接收两个参数:obj(含page、limit、where)和count(是否查总数) - 若用
$.ajax()替代默认请求,必须把obj.page和obj.limit带上,例如:data: { page: obj.page, limit: obj.limit, ...obj.where } - 别漏掉
obj.where—— 搜索条件、排序字段都藏在这里
Token 从哪取?localStorage 还是全局变量
Token 通常存在 localStorage 或 sessionStorage,但要注意:表初始化时可能还没加载完 Token,导致请求 401。
- 建议在
table.render()前加一层判断:if (!localStorage.getItem('token')) { layer.msg('未登录'); return; } - 不要在
request函数里同步读取异步获取的 Token(比如从接口刷新),那会阻塞表格渲染 - Token 过期时,
$.ajax()的error回调里可跳转登录页,但记得加return避免重复执行res.success分支
完整 request 替换示例(带 Token 和分页)
table.render({
elem: '#demo',
url: '/api/list', // 仅作占位,实际不走这个 url
request: {
pageName: 'page',
limitName: 'limit'
},
response: {
statusName: 'code',
statusCode: 200,
msgName: 'msg',
countName: 'total',
dataName: 'data'
},
// 关键:重写 request 行为
request: function(obj) {
const token = localStorage.getItem('token');
if (!token) return;
$.ajax({
type: 'GET',
url: '/api/list',
headers: { 'Authorization': 'Bearer ' + token },
data: {
page: obj.page,
limit: obj.limit,
...obj.where
},
dataType: 'json',
success: function(res) {
if (res.code === 200) {
table.render({
elem: '#demo',
data: res.data,
count: res.total,
page: { curr: obj.page }
});
} else {
layer.msg(res.msg || '请求失败');
}
},
error: function(xhr) {
if (xhr.status === 401) {
location.href = '/login';
}
}
});
}
});
注意:上面示例用了嵌套 table.render(),实际项目中建议抽离成独立函数,避免重复初始化。Token 注入点只有这一个可控入口,漏掉任意一处(比如没传 obj.where 或没处理 401)都会让分页或权限失效。











