如何在JavaScript中捕获NetworkError?
在Chrome的JavaScript控制台中,如果我运行以下命令:如何在JavaScript中捕获NetworkError?,javascript,xmlhttprequest,referenceerror,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(
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
我怎样才能抓住网络错误?我想你的意思是:
if(exception.name == 'NetworkError'){
console.log('There was a network error.');
}
我不认为该错误是NetworkError的实例,但以以下方式抛出:
throw {
name: 'NetworkError',
message: 'A network error occurred.'
// etc...
}
调查这件事。您可以获取响应的状态。我在寻找检查使用Axios时出现的
网络错误的方法时找到了这个答案,因此如果您不使用Axios,这个答案可能不适合您
我通过Axios接收的错误对象具有config
、request
和response
属性,并且request
和response
都具有status
属性<代码>响应
对象的属性显示在下图中:
我的axios配置如下所示:
this.client = axios.create(options);
this.client.interceptors.response.use(this.handleSuccessResponse, this.handleErrorResponse);
this.unauthorizedCallback = () => {};
而handleErrorResponse
方法是:
handleErrorResponse(error) {
// use the information from the error object here
}
编辑:根据以下建议:
如果您使用的是axios和nginx,这可能是您的评论。我遇到了
错误的问题。响应未定义结果是因为CORS问题。必须将我的nginx config设置为关键字始终添加适当的头来解决CORS,否则头会在错误响应时被剥离,所以CORS问题会出现。有关更多信息,请参阅。异常。即使出现网络错误,name也会返回“Error”
更好的方法是检查错误是否具有如下url配置:
if(exception.config && exception.config.url){
// network error
} else {
// other errors
}
readystate在调用send()之后才会更改,但是send()调用是产生异常的原因。这非常有效。我还应该问:在Chrome的JS控制台中,它仍然显示“GET(url)”,左侧有一个红色的X,同时在控制台的右下角统计错误。还有什么方法可以捕捉到这一点吗?Afaik chrome控制台以这种方式显示所有失败的请求,捕捉到错误将防止在Firefox中破坏您的代码错误的名称是TypeError
,但消息说NetworkError当尝试获取资源时
FWIW,我的axios网络错误的请求状态为0,并且响应对象未定义。@DylanSmith您确定签入的位置正确吗?还是用正确的方法抓住它?我想是的。我正在处理的情况是,服务器不可访问(类似于OP),因此没有响应,因此它可能是未定义的。好吧,这是一个特殊情况,您现在知道如何处理:)@DylanSmith Upvote。你说得对。答案不适用于axios,因为result。对于有axios错误的我来说,name
始终是“Error”
。检查result.response
是否未定义适用于检查第5层以下的网络错误。此外,结果还包含布尔值isAxiosError
。