У нас есть обработчик ошибок для публикации сообщения.
$(document).ajaxError(function (e, xhr, options) {
window.postMessage(....);
});
Один из вызовов выборки возвращает 401
this.fetch = function(url) {
return fetch(url, {
}
}).then(function(response) {
return response.json();
})
Когда я проверяю ответ, статус равен 401, но response.json() выдает «Uncaught (in promise) SyntaxError: Unexpected end of JSON input». Из-за этого ajaxError не срабатывает.
Ожидаемое поведение: я хочу, чтобы document.ajaxError отправил сообщение, если я не получу статус 200 из вызова выборки.
У нас есть wrapper.js с переопределяющей функцией.
window.fetch = (function(arg) {
}(window.fetch)
Могу ли я поймать эти исключения глобально внутри этой функции?
Другое дело, что fetch
не выйдет из строя на 401, а это означает, что он войдет в обратный вызов .then
. Это нелогично, если исходить из jQuery ajax или axios. Вы должны проверить response.ok
и если false
, вам нужно отклонить вручную.
@Taplar Я внес изменения в описание вопроса. Как вы думаете, возможно ли обработать это глобально в window.fetch ?
Я не понимаю, как эта оболочка меняет тот факт, что ajax не происходит из jQuery. Обновлено: это также кажется логической ошибкой в том, что вы пытаетесь определить переменную, а также пытаетесь передать ее во IIFE, предназначенный для ее определения.
Согласно комментариям, я не смог сделать это с обработчиком ajaxError, поскольку он не исходит из jquery. Я смог сделать это внутри оболочки Window.fetch.
window.fetch = (function (original)) {
...............
return original.apply(this, args).then(function (response)) {
if (response.status !== 200)
{
window.postMessage({ event_type: 'request:failed', status: response.status);
}
}
}
Я был бы удивлен, если бы jQuery смог поймать ошибку вызова fetch ajax, поскольку она не возникла из jQuery.