为XHR捕获404错误

Tes*_*men 12 javascript ajax jquery

基本上,我必须创建一个javascript APP对象,它将为服务器排队一系列异步请求,处理对JSON的响应,并从中记录错误.

使用"try-catch"可以轻松捕获JSON处理错误,但是仍然会在浏览器的控制台中显示404,500等服务器错误,而我需要在"APP.history"中静默登录.

我尝试通过下面的代码实现它,但没有404错误触发一个错误.我究竟做错了什么?

xhr = new XMLHttpRequest();
xhr.open("GET", url, true)
xhr.onerror = function(){console.log("error")}  
xhr.upload.onerror = function(){console.log("error")}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,如何使用jQuery AJAX?

Duc*_*uco 37

我最近不得不自己解决这个问题.404状态不会触发xhr.onerror()因为技术上它不是错误,因为响应已完成(404本身就是响应).

我的解决方案是使用loadend()处理程序,无论如何都会触发,然后检查404的状态,或者您感兴趣的状态.

xhr = new XMLHttpRequest();
xhr.open("GET", url, true);

xhr.onloadend = function() {
    if(xhr.status == 404) 
        throw new Error(url + ' replied 404');
}
Run Code Online (Sandbox Code Playgroud)

XMLHttpRequestUpload存在相同的方法.不幸的是,我们的浏览器供应商不允许我们在2017年以编程方式抑制网络错误.但是,可以使用控制台的过滤选项来抑制网络错误.

  • @Tesmen 应该使这个答案正确,因为 404 不是错误。这是一个响应代码。另外,这个答案对我有用。 (2认同)