小编典典

捕获XHR的404错误

ajax

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

JSON处理错误很容易通过“ try-catch”捕获,但是服务器错误(如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")}

顺便说一句,如何用jQuery AJAX完成它?


阅读 197

收藏
2020-07-26

共1个答案

小编典典

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年以编程方式抑制网络错误。

2020-07-26