为XHR捕获404错误

时间:2015-05-24 17:26:48

标签: javascript jquery ajax

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

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

我尝试通过下面的代码实现它,但404错误都不会触发一个错误。我做错了什么?

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

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

2 个答案:

答案 0 :(得分:32)

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');
}

XMLHttpRequestUpload存在相同的方法。 很遗憾,我们的浏览器供应商不允许我们在2017年以编程方式抑制网络错误。However, networks errors can be suppressed using the console's filtering options.

答案 1 :(得分:-3)

status可让您显示已发生的错误。

所以你可以做这样的事情

xhr = new XMLHttpRequest();
xhr.open("GET", url, true)
xhr.onerror = function(){console.log("error" + xhr.status)}  
xhr.upload.onerror = function(){console.log("error" + xhr.status)}

所以,如果它是404,它会在你的警告中说“错误404”,并对其余代码也会这样做。

希望这会有所帮助 约什