ajax 与 err_connection_refused,关于javascript:如何在jquery ajax中处理net :: ERR_CONNECTION_REFUSED...

我有这种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 - 所以这很好,我只是想处理它。 我在ajax调用中有.fail,但它没有处理:ERR_CONNECTION_REFUSED

在这种情况下,您能就如何处理:ERR_CONNECTION_REFUSED提出建议吗?

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

你试过.error属性而不是.fail吗?

尝试在ajax选项中使用timeout属性来触发错误回调

@RickHoving是的,我做到了。 在这种情况下,.error没有被解雇。

您可以使用$.ajax的timeout属性来触发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回调。

那么没有其他方法吗? 你有什么想法try-cath没有处理那个错误吗?try {$.ajax({ ... });} catch(ex) {}

我可以确认没有明确设置超时属性就无法捕捉到这种问题。 另一种方法是检查成功处理程序中的数据值,如果它为空,则执行类似于错误处理程序的操作:stackoverflow.com/a/6792515/615924

在我的情况下,设置超时仍会导致net::ERR_CONNECTION_REFUSED和fail无法运行。 还有其他需要满足的条件吗?

@sreginogemoh关于try {} catch块,它们对同步代码很有用。 使用Asynch ajax调用代码运行并回调注册。 几秒钟之后会触发它们而不会阻塞其余的代码,因此在http promise对象满足或拒绝时,try {} catch块已经完成运行。

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

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

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

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

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

如果超时"失败",则该函数的"错误"参数将为"超时"而不是"错误"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值