Layui table 的 request 配置不支持直接添加 headers,需通过 beforeSend 回调在 XMLHttpRequest 实例上调用 setRequestHeader 注入;Token 应从 localStorage 等安全位置读取,并配合 parseData 处理 401 等异常响应。
layui table 的 request 配置不支持直接加 headers
这是最常卡住的地方:你翻遍文档,发现 request 只能改 url、page、limit 这几个字段,压根没地方塞 headers。layui 2.8.x 之前版本的 table.render() 确实不提供请求头配置入口——它底层用的是 layui.jquery(即封装过的 jquery.ajax),但没暴露 headers 选项。
所以硬往 request 里写 headers: { Authorization: 'Bearer xxx' } 是无效的,请求发出去根本不会带上。
必须用 beforeSend 拦截并修改原生 XHR
Layui 表格实际发起请求前,会触发 beforeSend 回调(注意不是 jQuery 的全局 ajaxSetup),这个回调传入的是原始的 XMLHttpRequest 实例,你可以在这里调用 setRequestHeader。
-
beforeSend是唯一可靠且不影响分页、排序等默认行为的注入点 - Token 建议从 localStorage 或全局变量读取,避免硬编码
- 必须在
table.render()的配置对象中显式声明,不能漏掉
示例:
table.render({
elem: '#demo',
url: '/api/users',
// 其他配置...
beforeSend: function(xhr) {
const token = localStorage.getItem('access_token');
if (token) {
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
}
}
});
Token 过期时表格会静默失败,得自己处理 parseData
如果 Token 失效,后端通常返回 401 或自定义错误码,但 Layui 默认把非 200 响应全当“请求异常”,只显示“数据接口请求异常”,不提示具体原因,也不触发 error 回调。
- 用
parseData拦截响应体,检查状态码或业务 code - 遇到 401 时主动跳转登录页或清空 token,否则用户会一直看到空表格
- 别依赖
done回调——它只在成功解析数据后才执行,失败时根本进不去
示例:
parseData: function(res) {
if (res.code === 401) {
localStorage.removeItem('access_token');
location.href = '/login';
return { count: 0, data: [] };
}
return {
count: res.total || res.count,
data: res.data || []
};
}
Vue/React 项目里混用 Layui 表格要小心 token 同步时机
如果你在 Vue 组件 mounted 后才拿到 token(比如通过 axios 请求登录接口),而 table.render() 在页面加载时就执行了,那 beforeSend 里读到的 token 很可能是 null 或旧值。
- 不要在组件初始化时立刻 render 表格,等 token 确认就绪再调用
- 可以用
v-if="hasToken"控制表格容器渲染,或用 Promise 包裹table.render - 避免在
beforeSend里写异步逻辑(比如 await fetch token)——XHR 已发出,来不及了
关键点就一个:token 必须在 table.render() 执行前已存在,且后续变更需手动调用 table.reload() 并传新 beforeSend。

















