如何在jquery ajax中处理net :: ERR_CONNECTION_REFUSED

sre*_*moh 17 javascript ajax jquery

我有这种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);
});
Run Code Online (Sandbox Code Playgroud)

但问题是,在https请求我的ajax无法正常工作,因为我调用的服务无法通过https访问,而且我收到错误:ERR_CONNECTION_REFUSED- 所以很好,我只是想处理它.我有一个.failajax调用,但它没有处理:ERR_CONNECTION_REFUSED 你能就:ERR_CONNECTION_REFUSED这种情况下如何处理提出建议吗?

我也试图将我的ajax调用封装到try-catchblock,但它也没有工作.

moh*_*ias 6

您可以使用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);
});
Run Code Online (Sandbox Code Playgroud)

fail当没有互联网时,这将触发回调.

  • 我可以确认,如果不显式设置超时属性,就无法捕获此类问题。另一种方法是检查成功处理程序中的数据值,如果它为空,则执行类似于错误处理程序的操作:http://stackoverflow.com/a/6792515/615924 (2认同)
  • @sreginogemoh关于尝试{} catch块,它们是同步的代码非常有用.随着非同步Ajax调用的代码运行并注册了回调.几秒钟之后会触发它们而不会阻塞其余的代码,因此在http promise对象满足或拒绝时,try {} catch块已经完成运行. (2认同)