$(document).ajaxError не срабатывает на 401

У нас есть обработчик ошибок для публикации сообщения.

 $(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)

Могу ли я поймать эти исключения глобально внутри этой функции?

Я был бы удивлен, если бы jQuery смог поймать ошибку вызова fetch ajax, поскольку она не возникла из jQuery.

Taplar 27.05.2019 21:36
jsfiddle.net/uxbcLajt да, не похоже, что ajaxError будет ловить ошибки из запросов ajax, не исходящих из jQuery
Taplar 27.05.2019 21:44

Другое дело, что fetch не выйдет из строя на 401, а это означает, что он войдет в обратный вызов .then. Это нелогично, если исходить из jQuery ajax или axios. Вы должны проверить response.ok и если false, вам нужно отклонить вручную.

Emile Bergeron 28.05.2019 15:58

@Taplar Я внес изменения в описание вопроса. Как вы думаете, возможно ли обработать это глобально в window.fetch ?

Scorpio 28.05.2019 20:56

Я не понимаю, как эта оболочка меняет тот факт, что ajax не происходит из jQuery. Обновлено: это также кажется логической ошибкой в ​​том, что вы пытаетесь определить переменную, а также пытаетесь передать ее во IIFE, предназначенный для ее определения.

Taplar 28.05.2019 20:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
415
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно комментариям, я не смог сделать это с обработчиком 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); 
       }   
   }
}

Другие вопросы по теме