Есть ли способ поймать 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);
}
Функция сбоя может быть заражена, но я не получил информации об ошибке, либо она:
или что-нибудь еще.. вопрос будет, как получить такую ошибку?
Я даже пытался достичь цели, используя 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
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. Из того, что я видел, он не даст вам более полезной информации, чем решение Киранса.