根据jQuery.ajaxPrefilter()的描述,它应该在请求发送到之前被触发$.ajax()
,但从我在项目中看到的,首先调用服务器 API 端点,然后ajaxPrefilter
调用该函数做出任何改变都为时已晚。
我可能在这里遗漏了一些东西,但我没有看到它......
这是我的注册的样子:
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
if (options.url.startsWith('api') || options.url.startsWith('/api')) {
if (options.headers === undefined) {
options.headers = {};
}
if (!options.headers.Authorization) {
var jwt = sessionStorage.getItem('accessToken');
jqXHR.setRequestHeader('Authorization', 'Bearer ' + jwt);
}
}
});
我完全知道我可以beforeSend
用来设置标头,但我想通过首先检查标头是否存在来做到这一点,如果不存在,则添加它,并且在发送请求标头之前读取它们的唯一方法是ajaxPrefilter
据我所知,只能使用。
我可能最终会使用beforeSend
,但我很好奇为什么这不能像文档中描述的那样工作?也许我不完全理解这是如何工作的......
我正在使用 jQuery 版本 3.3.1。
编辑:
似乎设置async: false
解决了这个问题,但这对我来说就像 jQuery 中的一个错误。
编辑2:
我想我可能在某个地方遇到了一些错误,因为现在上面的代码可以工作了。我不知道这个错误可能在哪里,因为通过查看我的 git 更改它根本不明显,但它现在可以工作......