我有这样一种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
块中,但它也不起作用。
发布于 2015-04-02 20:45:22
您可以使用$.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
回调。
发布于 2016-09-07 08:24:07
当jqXHR.readyState (即,$.ajax(...).fail()方法的第一个参数的readyState字段)为0时,似乎表示发生了网络错误。但是,我无法通过JavaScript确定确切的网络错误是什么。
我已经查看了jQuery Ajax代码,xhr.send() (即XMLHttpRequest.send())方法(生成网络错误)既不能捕获也不能抛出错误。因此,不可能捕捉到它。
浏览器似乎检测到并显示了正确的错误消息,但jQuery忽略了发生的特定类型的网络错误。
发布于 2015-08-29 03:02:54
所以,如果我们得到一个ERR_CONNECTION_REFUSED
,就会调用fail
,但实际上没有办法看到为什么要调用fail
。有没有办法在fail方法内部检测失败的原因?例如超时和连接被拒绝?这两者是有区别的。一个我可以重试,另一个没有区别。
您不需要设置超时来处理连接被拒绝的失败。
https://stackoverflow.com/questions/29412865
复制相似问题