Подтвердить что ты не робот

Избавиться от 401 (несанкционированной) ошибки ajax в консоли браузера

Я вызываю api через javascript, используя вызов jQuery.ajax. Ответ api на 401, если пользователь не прошел проверку подлинности, и я хочу проигнорировать эту ошибку только для этого вызова.

Я пробовал все параметры обратного вызова, описанные в параметрах jQuery, но ошибка все же появляется в консоли браузера (как в Firefox, так и в Chrome).

Вот пример кода, который вызывает ошибку:

$.ajax({
    type: 'GET',
    url: '/url-with-auth',
    dataType: 'json',
    statusCode: {
        401: function (error) {
            // simply ignore this error
            console.log(error);
        }
    },
    complete: logall,
    error: function () {
        // simply ignore this error
        console.log(error);
    },
    async: false
}).fail(function () {
        // ignore the error and do nothing else
        console.log("$.get failed!");
    });

Это также имеет побочный эффект повторного запроса учетных данных пользователя на промежуточном компьютере, который защищен файлом .htaccess, поскольку браузер считает, что пользователь не аутентифицирован, поэтому в следующих запросах пользователю необходимо повторно ввести свои учетные данные http.

Есть ли способ полностью игнорировать эту ошибку?

Изменить

В настоящее время у меня есть HTML-шаблон, который полностью кэширован для приложения, и я хочу сохранить это поведение по соображениям производительности. Единственной частью, которая изменяется в макете, является информация для входа для текущего пользователя, поэтому я просматриваю (кэшированную) страницу с разметкой по умолчанию для не зарегистрированных пользователей, а затем с помощью jQuery я заменяю соответствующие элементы разметки на данные входа, возвращаемые вызовом ajax. Поэтому, если пользователь не зарегистрирован и конечная точка ajax возвращает 401, мне ничего не нужно, разметка должна оставаться прежней.

Все работает в этот момент, единственное уродство в том, что у меня есть ошибка 401 javascript в консоли, и я бы хотел избавиться от нее.

Вот скриншот сообщения, о котором я говорю:

console error

4b9b3361

Ответ 1

Я также столкнулся с этой проблемой и хотел прервать исключение в консоли JavaScript для ошибок HTTP 401 и 404 и т.д. Я нашел этот вопрос и не понял, почему обработчики error() и statusCode() не замолчали, поэтому я сделал свое собственное копание в нем.

Насколько я могу судить, выясняется, что это проблема с собственным объектом XMLHttpRequest для ajax в браузере, а не с jQuery. Чтобы доказать это, я использовал следующий тестовый код:

function xhrTest(index) {
    var ajaxObjects = [
        $.ajaxSettings.xhr(), // what jquery returns
        new XMLHttpRequest()  // the native one in the browser
    ];
    var ajax = ajaxObjects[index];
    ajax.onreadystatechange = function() {console.log("xhrTest: state: " + ajax.readyState)};
    var errorHandler = function() {console.log("xhrTest: error");};
    ajax.onerror = errorHandler;
    ajax.onabort = errorHandler;
    ajax.open("GET", "/fileThatDoesNotExist", true);
    ajax.send();    
}

Обратите внимание, что при вызове этого (я сделал это из консоли JavaScript) с помощью xhrTest (0) или xhrTest (1), который обходит jQuery, результаты одинаковы:

same results whether jQuery is used or not

Ответ 2

Можете ли вы добавить скрытое поле на страницу (я предполагаю, что она динамически сгенерирована), например:

<input type="hidden" name="isLoggedIn" value="true" (or false) />

Затем в вашем javascript разместите

if ($('input[name=isLoggedIn"]').val() == "true")
{
     //your ajax call here
}