Согласно описанию 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, но пока работает ...