我正在使用jQuery.ajax调用通过javascript调用api。如果用户未经过身份验证,则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错误,我想摆脱它。
以下是我正在谈论的消息的屏幕截图:
答案 0 :(得分:3)
我也遇到过这个问题,并希望在JavaScript控制台中抑制HTTP 401和404等错误的异常。我发现了这个问题并且没有看到为什么error()和statusCode()处理程序没有使异常安静,所以我自己进行了挖掘。
据我所知,这是浏览器中本机ajax XMLHttpRequest对象的问题,而不是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();
}
请注意,当使用xhrTest(0)或xhrTest(1)(绕过jQuery)调用this(我是从JavaScript控制台执行)时,结果是相同的:
答案 1 :(得分:-2)
你可以在页面上添加隐藏字段(我猜它是动态生成的),如:
<input type="hidden" name="isLoggedIn" value="true" (or false) />
然后在你的javascript中,放置
if ($('input[name=isLoggedIn"]').val() == "true")
{
//your ajax call here
}