Избавиться от 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]()
Ответы
Ответ 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
}