jquery 如何抓网::ERR_CONNECTION_REFUSED

dfddblmv  于 2023-02-03  发布在  jQuery
关注(0)|答案(4)|浏览(169)

有没有办法抓住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);
}

fail函数可以捕获,但我没有得到任何关于错误的信息,或者它是:

  • 错误名称未解决
  • 错误_连接_拒绝
  • 客户端阻塞错误
  • 隧道连接失败错误(使用代理时)

或者其他什么...问题是,如何得到这种错误?

l3zydbqr

l3zydbqr1#

我甚至尝试使用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版本,它也将处理一般错误,因为我们不能确切地知道错误的原因。
x一个一个一个一个x一个一个二个x

    • 结论**

由于javascript XMLHttpRequest()在处理不同的错误状态时仍然不够有效,我们无法知道AJAX请求网络错误的确切原因。我们只能捕获一般错误和一些其他已知的状态代码,如
404页面未找到
"500"表示服务器无响应
更多信息可从https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html了解

    • 更新:**自从我上次更新这篇文章以来已经有很长一段时间了。我看到了一些尝试实现类似目标的答案,但仍然收效甚微。正如本主题中的一些答案所提到的,我们也可以使用XMLHttpRequest.onerror回调函数来捕捉一些常见错误,但如果你仍然在使用IE,那么它可能不会工作。
gg0vcinb

gg0vcinb2#

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解决方案更有用的信息。

dhxwm5r4

dhxwm5r43#

这些类型的错误发生在与服务器没有连接时(意味着服务器没有运行)。我遇到了这个错误,但通过查看它,发现没有消息,因此我的解决方案是捕获所有没有如下消息的错误:

catch (err) {
  if(!err.data?.message) {
    console.log("Server error please try later!")
  }
}

希望这能解决你的问题!

o8x7eapl

o8x7eapl4#

您可以在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

相关问题