Подтвердить что ты не робот

Как обращаться с сетью:: ERR_CONNECTION_REFUSED в jquery ajax

У меня есть такой javascript:

$.ajax({
    url: "//myapi.com/json",
    dataType: "jsonp"
}).done(function (data) {
    selectText('Id', data.country);
}).fail(function (jqXHR, textStatus, errorThrown) {
    var defaultOption = 'US'
    selectDropdownByText('Id', defaultOption);

    console.log(errorThrown);
});

Но дело в том, что https-запрос мой ajax не работает, потому что служба, которую я вызываю, недоступна через https, и я получаю сообщение об ошибке :ERR_CONNECTION_REFUSED - так что все в порядке, я просто хочу обработать это. У меня есть .fail в ajax-вызове, но он не обрабатывает :ERR_CONNECTION_REFUSED Не могли бы вы дать совет о том, как обращаться с :ERR_CONNECTION_REFUSED в этом случае?

Я также пытался обернуть мой вызов ajax блоку try-catch, но он тоже не работал.

4b9b3361

Ответ 1

Вы можете использовать свойство timeout $.ajax для запуска обратного вызова error.

Это позволит убедиться, что обратный вызов error запущен, если сервер не отвечает в течение определенного срока.

$.ajax({
    url: "//myapi.com/json",
    dataType: "jsonp",
    timeout: 15000 // adjust the limit. currently its 15 seconds
}).done(function (data) {
    selectText('Id', data.country);
}).fail(function (jqXHR, textStatus, errorThrown) {
    var defaultOption = 'US'
    selectDropdownByText('Id', defaultOption);

    console.log(errorThrown);
});

Это вызовет обратный вызов fail, когда нет интернета.

Ответ 2

Похоже, что когда jqXHR.readyState(то есть поле readyState первого параметра метода $.ajax(...). fail()) равно 0, произошла сетевая ошибка. Тем не менее, я не смог выяснить, что такое точная сетевая ошибка через JavaScript.

Я просмотрел код jQuery Ajax, и xhr.send() (т.е. метод XMLHttpRequest.send()) (который генерирует сетевую ошибку) не улавливает и не выдает ошибку. Таким образом, это невозможно поймать.

Похоже, браузер обнаруживает и отображает правильное сообщение об ошибке, но jQuery не обращает внимания на определенный тип сетевой ошибки.

Ответ 3

Итак, fail вызывается, если мы получаем ERR_CONNECTION_REFUSED, но нет никакого способа увидеть, почему вызывается fail. Есть ли способ обнаружить внутри метода отказа, почему все не удалось? то есть время ожидания или соединение отклонено? Есть разница между ними. Один, который я мог бы повторить, другой не имеет значения.

Вам не нужно устанавливать таймаут для обработки отказов отказа соединения.