Вместо того, чтобы связываться с функцией ajaxError
, как вы относитесь к обработке ошибки именно там, где вы делаете запрос AJAX? Существует встроенный обратный вызов error
, который вы можете использовать, и таким образом у вас все равно будет простой доступ к исходному запросу, чтобы его можно было отправить повторно.
const getToken = () => 'Bearer 123';
const sendRequestWithResend = (url, options) => {
let existingErrorFunction = options.error;
options.error= function(XMLHttpRequest, textStatus, errorThrown) {
if(existingErrorFunction){
existingErrorFunction(XMLHttpRequest, textStatus, errorThrown);
}
//resend request with header token, if header wasn't set
if(options.headers && options.headers.Authorization){
return; //token was already set
}else{
if(!options.headers){
options.headers = {};
}
options.headers.Authorization = getToken();
sendRequestWithResend(url,options);
}
}
$.ajax(url,options);
}
sendRequestWithResend('https://notarealdomainforthisexample.com',{});
Здесь я создал функция-обёртка для ваших AJAX звонков. Он автоматически добавляет обработчик ошибок (при сохранении любой существующей функции обработки ошибок), который повторяет запрос (рекурсивно вызывая ту же функцию) с токеном-носителем (если у него уже нет токена - важно предотвратить бесконечное число l oop).