그물 잡는 법: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...catch
try 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
'programing' 카테고리의 다른 글
ui-bootstrap-tpls.min.js와 ui-bootstrap.min.js의 차이점은 무엇입니까? (0) | 2023.03.20 |
---|---|
angularjs를 사용하여 저장되지 않은 데이터 감지 (0) | 2023.03.15 |
후크가 반응하는 API 호출은 어디서 할 수 있나요? (0) | 2023.03.15 |
각도 2 단위 테스트: 'descript' 이름을 찾을 수 없습니다. (0) | 2023.03.15 |
div 클래스의 마지막 아이 (0) | 2023.03.15 |