如何在JavaScript中捕获NetworkError?

时间:2013-11-27 01:03:16

标签: javascript xmlhttprequest referenceerror

在Chrome的JavaScript控制台中,如果我运行它:

var that = new XMLHttpRequest();
that.open('GET', 'http://this_is_a_bad_url.com', false);
that.send();

我得到了一个故意预期的错误:

NetworkError: A network error occurred.

我想抓住这个,所以我使用:

var that = new XMLHttpRequest();
that.open('GET', 'http://this_is_a_bad_url.com', false);
try {
  that.send();
} catch(exception) {
  if(exception instanceof NetworkError) {
    console.log('There was a network error.');
  }
}

但是,我收到有关未定义NetworkError的错误:

ReferenceError: NetworkError is not defined

如何捕获NetworkError?

4 个答案:

答案 0 :(得分:13)

我认为你的意思是:

if(exception.name == 'NetworkError'){
   console.log('There was a network error.');
}

我不相信错误是NetworkError的一个实例,但是以这种方式抛出:

throw {
   name: 'NetworkError',
   message: 'A network error occurred.'
   // etc...
}

答案 1 :(得分:2)

我在寻找一种方法来检查使用Axios时得到的Network Error时找到了这个答案,因此,如果您不是使用Axios,则此答案可能是 not < / em>为您。

我通过Axios接收到的错误对象具有configrequestresponse属性,而requestresponse都具有{{1} }属性。 status对象的属性显示在下图中:

error.response object from Axios

我的axios配置如下:

response

this.client = axios.create(options); this.client.interceptors.response.use(this.handleSuccessResponse, this.handleErrorResponse); this.unauthorizedCallback = () => {}; 方法是:

handleErrorResponse

答案 2 :(得分:0)

查看onreadystatechange事件。您可以获得响应的状态。

答案 3 :(得分:0)

exception.name即使在发生网络错误时也返回“错误” 更好的方法是检查错误是否具有如下的url配置:

if(exception.config && exception.config.url){
  // network error
} else {
  // other errors
}