Как получить код возврата вызова ajax при получении событий полного календаря

У меня есть это полное определение календаря:

            $('[data-toggle="calendar"]').fullCalendar({
                    themeSystem: 'bootstrap4',
                    locale: 'es',
                    monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
                    monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
                    dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
                    dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],
                    header: {
                        left: 'title',
                        center: '',
                        right: 'prev,next today'
                    },
                    buttonText: {
                        today: 'Hoy',
                        month: 'Mes',
                        week: 'Semana',
                        day: 'Día'
                    },
                    displayEventTime: false,
                    events: '/myURL',
                    eventRender: function (eventObj, $el) {
                        $el.popover({
                            title: 'Menú ' + eventObj.title,
                            content: eventObj.description.replace(/\n/g, '<br>'),
                            trigger: 'hover',
                            placement: 'top',
                            container: 'body',
                            html: true
                        });
                    },
                });

Обратите внимание на определение events. Он вызывает метод, используя вызов ajax. Проблема здесь в том, что вызов ajax может возвращать запрещенный код ошибки. Когда возникает это условие, этот код ошибки отправляется с использованием заголовка ответа (X-Responded-JSON).

Мне нужно иметь возможность сделать что-то вроде этого:

function checkUserSession(xhr) {
    // Si es 401, es porque se debe redireccionar al login
    var response = xhr && typeof xhr.getResponseHeader === 'function' ? xhr.getResponseHeader("X-Responded-JSON") : null;
    if (response !== null) {
        var obj = JSON.parse(response);
        if (obj.status === 401) {
            //var href = obj.headers.location;
            //href = obj.headers.location.substr(0, obj.headers.location.indexOf('?ReturnUrl=') + 11) + '/' + location.pathname;
            redirectToLogin();
            return false;
        }
    }

    return true;
}

То есть мне нужно получить возвращенный объект XHR из вызова ajax. Я делаю это, когда делаю другие вызовы ajax, но я не нашел способа сделать это в плагине fullcalendar.

С уважением Хайме


person jstuardo    schedule 29.04.2021    source источник
comment
403 Forbidden должен быть установлен как стандартный код состояния HTTP в ответе, а не как какой-то специальный HTTP-заголовок. И 401 — Несанкционированный, а не Запрещенный. В любом случае, похоже, вам нужен шаблон events-as-a-function, так что вы может сделать собственный AJAX-запрос к серверу, самостоятельно обработать ответ, а затем устранить эти ошибки разрешений, а также иметь возможность передавать события обратно в fullCalendar в случае успеха. Либо так, либо просто заставить ваших пользователей входить в систему, прежде чем они вообще увидят страницу календаря?   -  person ADyson    schedule 30.04.2021
comment
Поскольку это вызов Ajax, все ошибки возвращаются с использованием объекта XHR. Эта ошибка 403 автоматически вызывается фреймворком, когда пользователю нужно войти в систему через некоторое время. Это именно то, что мне нужно обнаружить, чтобы перенаправить на страницу входа.   -  person jstuardo    schedule 30.04.2021
comment
Вы получаете статус из заголовка X-Responded-JSON, хотя и в этом коде, а не из фактического исходного состояния HTTP. Вы находитесь в ситуации, подобной той, что описана в этом вопросе: stackoverflow.com/questions/20662608/, где есть перенаправление на страницу входа и, следовательно, необработанный статус на самом деле равен 200?   -  person ADyson    schedule 30.04.2021
comment
В любом случае, чтобы получить объект XHR, вы можете либо следовать моему первому предложению выше и сделать свой собственный запрос AJAX на сервер, либо fullCalendar 3 использует jQuery $.ajax ниже, чтобы сделать запрос AJAX, когда вы используете события-как-JSON. Итак, согласно fullcalendar.io/docs/v3/events-json-feed. вы можете определить обратные вызовы ошибки и успеха в параметрах вашего события, что даст вам доступ к базовым обратным вызовам ошибки и успеха $.ajax. И в соответствии с api.jquery.com/jQuery.ajax они дают вам доступ к jqXHR объект (который является надмножеством стандартного объекта XHR).   -  person ADyson    schedule 30.04.2021