首页 > 解决方案 > 如何对浏览器 Javascript 中的 NS ERROR FAILURE 错误做出反应

问题描述

在 Firefox 的 JavaScript 引擎中,我执行(已弃用)同步XMLHttpRequest,如下所示:

var request = new XMLHttpRequest();
request.open('GET', 'http://localhost:8780/BoilerData/invention.html', false);
request.send();

if (request.status === 200) {
  ...
} else {
  ...
}

问题是当服务器myserver.com未运行时,我在浏览器控制台中出现NS ERROR FAILURE错误并且该else部分未执行。

但是我想对 JavaScript 中的这个错误做出反应。如何在仍然执行 aa synchronous 的同时捕获此错误并对其做出反应(例如,使用另一台服务器)XMLHttpRequest

更新

这里有更多关于错误信息的细节。在我的浏览器(Firefox 78.4.1esr)的控制台中,我看到以下内容:

火狐浏览器中的错误

标签: javascriptexceptionxmlhttprequest

解决方案


如果您更喜欢同步请求,请尝试捕获net::ERR_CONNECTION_TIMED_OUT异常:

var request = new XMLHttpRequest();
request.open('GET', 'http:/myserver.com/bar/foo.txt', false);
try{
  request.send();
  if (request.status === 200) {
    //...
  }
}catch(e){
  console.log('Got an exception: ', e);
  //else ...
}

不推荐使用主线程上的同步 XMLHttpRequest,您可能希望request.open异步执行,并将else逻辑放在onerror事件处理器中:

var request = new XMLHttpRequest();
request.open('GET', 'http:/myserver.com/bar/foo.txt', true);

request.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
    //    ...
    } 
}
request.onerror = function() {
   console.log('An error occured! status = ', request.status);
   // what else {
   // ...
}

request.send();


推荐阅读