У меня есть глобальная ajaxError()
функция для веб-приложения. Веб-приложение использует проверку подлинности Cookie с помощью Azure AD OpenIdConnect. Я пытаюсь обработать случай, когда срок действия файла cookie истекает до того, как будет сделан ajax-запрос к моему API. Если срок действия файла cookie истек, API вернет ответ 302 при входе в систему Microsoft, который затем попытается повторно авторизовать пользователя, но не удастся из-за CORS. Когда это происходит, я добавляю iframe на страницу с src, настроенным на URL в моем приложении, который будет повторно запрашивать пользователя и возвращать обновленные файлы cookie.
Я повторно отправляю запрос ajax следующим образом:
$(document).ajaxError(function (event, request, settings, thrownError) {
if (/* CORS error */) {
var iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.src = reAuthUri;
document.body.appendChild(iframe);
// Re-send request.
$.ajax(settings);
}
});
Это работает, повторно отправляет запрос с обновленными файлами cookie и успешно, но мой .done()
обратный вызов никогда не срабатывает. Пример:
$.ajax({
type: "GET",
url: "/api/things/"
}).done(result => doSomething());
doSomething()
не вызывается. Если я изменю ajax-запрос на использование success
вместо done()
, то он будет работать:
$.ajax({
type: "GET",
url: "/api/things/",
success: result => doSomething()
});
Однако, поскольку .done()
является предпочтительным способом обработки обратных вызовов ajax сейчас, каждый запрос ajax вприложение написано с использованием его вместо старого свойства success
. Итак, есть ли способ получить действие .done()
для запроса, вызываемого при повторной отправке запроса в .ajaxError()
?