Не может обработать net::ERR_CONNECTION_REFUSED в чистом js
Я использую чистый JS (без JQuery), чтобы отправить XMLHttpRequest
запрос к серверу.
var _xhr = new XMLHttpRequest();
_xhr.open(type, url);
_xhr.setRequestHeader('Content-Type', 'application/json');
_xhr.responseType = 'json';
_xhr.onload = function () {
if (_xhr.status === 200) {
var _json = _xhr.response;
if (typeof _json == 'string')
_json = JSON.parse(_json);
success(_json);
} else {
error(_xhr);
}
};
_xhr.onerror = function(){
console.log('fail');
};
try {
_xhr.send(_to_send);
} catch (e){
options.error(_xhr);
}
когда я отправляю запрос, он терпит неудачу (это нормально), и я получаю ошибку, но я НЕ МОГУ ОБРАЩАТЬСЯ. xhr.onerror
выводит сообщение на консоль, но я получаю OPTIONS url net::ERR_CONNECTION_REFUSED
тоже. Как я могу избежать этого сообщения в консоли?
Также я использую window.onerror
обрабатывать все ошибки, но я не могу справиться с этим OPTIONS url net::ERR_CONNECTION_REFUSED
2 ответа
Это сработало для меня:
// Watch for net::ERR_CONNECTION_REFUSED and other oddities.
_xhr.onreadystatechange = function() {
if (_xhr.readyState == 4 && _xhr.status == 0) {
console.log('OH NO!');
}
};
Это не ограничивается просто net::ERR_CONNECTION_REFUSED, поскольку другие сетевые ошибки (например, net:: ERR_NETWORK_CHANGED, net:: ERR_ADDRESS_UNREACHABLE, net:: ERR_TIMED_OUT) могут быть "пойманы" таким образом. Я не могу нигде найти эти сообщения об ошибках в объекте _xhr, поэтому принятие программного решения о том, какая конкретно ошибка сети произошла, не будет надежным.
Этой ошибки не отображается в консоли. Как будто вы запрашиваете файл, который не существует, вы получаете 404
в консоли, независимо от того, обрабатываете ли вы ошибку или нет.