我正在使用 javascript 通过 api 调用jQuery.ajax http://api.jquery.com/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 凭据。
有什么办法可以完全忽略这个错误吗?
Edit
目前我有一个完全缓存应用程序端的 HTML 模板,出于性能原因我想保留此行为。布局中唯一发生变化的部分是当前用户的登录信息,因此我使用未登录用户的默认标记渲染(缓存)页面,然后使用 jQuery 将标记的相关元素替换为ajax 调用返回的登录信息。因此,如果用户未登录并且 ajax 端点返回 401 我不需要任何内容,则标记应保持不变。
此时一切正常,唯一丑陋的是我在控制台中出现 401 javascript 错误,我想摆脱它。
这是我正在谈论的消息的屏幕截图:
我也遇到了这个问题,并想抑制 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();
}
请注意,当使用绕过 jQuery 的 xhrTest(0) 或 xhrTest(1) 调用此方法(我是从 JavaScript 控制台执行的)时,结果是相同的:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)