关于javascript:如何在jquery ajax中处理net :: ERR_CONNECTION_REFUSED

How to handle net::ERR_CONNECTION_REFUSED in jquery ajax

我有这种javascript:

1
2
3
4
5
6
7
8
9
10
11
$.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 - 所以这很好,我只是想处理它。 我在ajax调用中有.fail,但它没有处理:ERR_CONNECTION_REFUSED
在这种情况下,您能就如何处理:ERR_CONNECTION_REFUSED提出建议吗?

我也试图将我的ajax调用包装到try-catch块,但它也没有工作。


您可以使用$.ajaxtimeout属性来触发error回调。

如果服务器在特定时间限制内没有响应,这将确保触发error回调。

1
2
3
4
5
6
7
8
9
10
11
12
$.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回调。


当jqXHR.readyState(即$ .ajax(...)。fail()方法的第一个参数的readyState字段)为0时,似乎发生了网络错误。但是,我无法通过JavaScript确定确切的网络错误。

我查看了jQuery Ajax代码,xhr.send()(即XMLHttpRequest.send())方法(生成网络错误)不会捕获也不会抛出错误。因此,不可能抓住它。

浏览器似乎检测并显示正确的错误消息,但jQuery无视发生的特定类型的网络错误。


因此,如果我们得到ERR_CONNECTION_REFUSED,则会调用fail,但实际上无法确定为什么要调用fail。有没有办法检测失败方法内部为什么失败?即超时与连接拒绝?两者之间存在差异。一个我可以重试,另一个没有区别。

您不需要设置超时来处理连接拒绝失败。