Не может обработать 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 в консоли, независимо от того, обрабатываете ли вы ошибку или нет.

Другие вопросы по тегам