如何捕获net :: ERR_CONNECTION_REFUSED

时间:2015-02-17 07:01:33

标签: javascript jquery ajax exception

有没有办法抓住failed to load resource: net::ERR_CONNECTION_REFUSED,我试过了:

try {
  $.post('',{},function(res) {
  }).fail(function (xhr, textStatus, errorThrown) { 
    xhr.textStatus = textStatus;
    xhr.errorThrown = errorThrown;
    console.log('fail',xhr);
    // how to get the 'ERR_CONNECTION_REFUSED' or anything else as string?
  });
} catch(e) {
  console.log('catch',e);
}

失败函数可以捕获,但我没有得到有关错误的信息,它是:

  • ERR_NAME_NOT_RESOLVED
  • ERR_CONNECTION_REFUSED
  • ERR_BLOCKED_BY_CLIENT
  • ERR_TUNNEL_CONNECTION_FAILED(使用代理时)

或其他任何事情..问题是,如何得到那种错误?

3 个答案:

答案 0 :(得分:14)

我甚至尝试使用javascript XMLHttpRequest()来实现目标

var xhttp= new XMLHttpRequest();
try{
  xhttp.onreadystatechange = function() {
    console.log(xhttp);
    if (xhttp.readyState == 4 && xhttp.status == 0) {
      alert("Unknown Error Occured. Server response not received.");
    }
  };
  xhttp.open("POST", "http://localhost:8080/data", true);
  xhttp.send();
}catch(e){
  console.log('catch', e);
}

上面的代码片段只提供了一般的错误处理,而我没有得到错误背后的确切原因。 try...catch语句无法捕获任何内容,因为try块中的所有函数都没有抛出任何异常。似乎XMLHttpRequest正在后台线程中运行,因此其运行时错误无法被捕获。

由于jQuery是一个实际上是javascript的库,它对$.post()的行为也相同,因为$.post()也在幕后使用XMLHttpRequest

下面是jQuery版本,它也将处理一般错误,因为我们无法确切地知道错误的原因。

try {
  $.post('http://localhost:8080/data', {}, function(res) {}).fail(function() {
      alert("Unknown Error Occured. Server response not received.");
  });
} catch (e) {
  console.log('catch', e);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<强>结论

由于javascript XMLHttpRequest()仍然没有足够的效率来处理不同的错误状态,我们无法确定AJAX请求的网络错误背后的确切原因。我们只能捕获一般错误和一些其他已知的状态代码,如

  

“404”找不到文件

     服务器无响应

“500”

     

可以从https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

了解更多信息

答案 1 :(得分:5)

var xhttp= new XMLHttpRequest();
xhttp.onreadystatechange = function() {
console.log(xhttp);

xhttp.onerror = function(e){
    alert("Unknown Error Occured. Server response not received.");
};

xhttp.open("POST", "http://localhost:8080/data", true);
xhttp.send();

获取可能更容易理解的错误的另一种方法是onerror事件处理程序。从我所看到的,它不会给你比Kirans解决方案更有用的信息。

答案 2 :(得分:1)

您可以使用Chrome浏览器的在线/离线版本。

var _Network_state = true;
    function updateIndicator() {
        // Show a different icon based on offline/online
        if (navigator.onLine) { // true|false
            // ... do other stuff
            _Network_state = true;
        } else {
            // ... do other stuff
            _Network_state = false;
        }
        console.info(_Network_state ? 'Online' : 'Offline');
    }
    // Update the online status icon based on connectivity
    window.addEventListener('online',  updateIndicator);
    window.addEventListener('offline', updateIndicator);
    updateIndicator();

在调用ajax之前,检查“ _Network_state