programing

그물 잡는 법:ERR_CONNECTION_REFUSED

elseif 2023. 3. 15. 19:25

그물 잡는 법:ERR_CONNECTION_REFUSED

잡을 수 있는 방법이 있나요?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 함수는 검출할 수 있습니다만, 에러에 관한 정보는 얻을 수 없었습니다.또, 다음과 같습니다.

  • ERR_NAME_NOT_RESOLVED
  • ERR_CONNECTION_REFUSED
  • ERR_BLOCKED_BY_CLIENT
  • ERR_TUNNEL_CONNECTION_FAILED(프록시 사용 시)

다른 것도...문제는, 어떻게 하면 이런 종류의 오류를 얻을 수 있는가 하는 것입니다.

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...catchtry block 내의 함수 중 예외를 발생시키는 함수가 없기 때문에 문이 아무것도 포착하지 못합니다.그런 것 같다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 를 참조해 주세요.

업데이트: 이 게시물을 마지막으로 업데이트한 지 매우 오래되었습니다.비슷한 목표를 달성하려고 노력하지만 아직 거의 성공하지 못한 답변은 거의 보이지 않았습니다.이 스레드의 일부 답변에서 언급한 바와 같이XMLHttpRequest.onerror일반적인 에러를 검출하기 위한 콜백 함수입니다만, 아직 IE 를 사용하고 있는 경우는, 동작하지 않는 경우가 있습니다.

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 이벤트 핸들러입니다.내가 본 바로는 키란스 솔루션보다 더 유용한 정보는 없을 거야.

이러한 종류의 에러는, 서버와의 접속이 없는 경우(즉, 서버가 실행되고 있지 않은 경우)에 발생합니다.이 에러에 직면했기 때문에, 이 에러를 보면 메세지가 표시되지 않기 때문에, 다음과 같은 메세지가 없는 에러는 모두 검출할 수 있습니다.

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

크롬으로 온라인/오프라인에 액세스할 수 있습니다.

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"를 검사합니다.

언급URL : https://stackoverflow.com/questions/28556398/how-to-catch-neterr-connection-refused