我有这种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
块,但它也没有用。
答案 0 :(得分: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);
});
如果没有互联网,这将触发fail
回调。
答案 1 :(得分:1)
当jqXHR.readyState(即$ .ajax(...)。fail()方法的第一个参数的readyState字段)为0时,似乎发生了网络错误。但是,我无法通过JavaScript确定确切的网络错误。
我查看了jQuery Ajax代码,而xhr.send()(即XMLHttpRequest.send())方法(生成网络错误)不会捕获也不会抛出错误。因此,不可能抓住它。
浏览器似乎检测到并显示正确的错误消息,但jQuery无视发生的特定网络错误类型。
答案 2 :(得分:0)
因此,如果我们获得fail
,则会调用ERR_CONNECTION_REFUSED
,但无法真正了解调用fail
的原因。有没有办法检测失败方法内部为什么失败?即超时与连接拒绝?两者之间存在差异。一个我可以重试,另一个没有区别。
您无需设置超时来处理连接拒绝失败。
答案 3 :(得分:0)
<code>$.ajax({
url: "//myapi.com/json", //this is problem
dataType: "jsonp"
}).done(function (data) {
selectText('Id', data.country);
}).fail(function (jqXHR, textStatus, errorThrown) {
var defaultOption = 'US'
selectDropdownByText('Id', defaultOption);
console.log(errorThrown);
});</code>
相对路径不好
<code>$.ajax({
url: "myapi.com/json", //this will work
dataType: "jsonp"
}).done(function (data) {
selectText('Id', data.country);
}).fail(function (jqXHR, textStatus, errorThrown) {
var defaultOption = 'US'
selectDropdownByText('Id', defaultOption);
console.log(errorThrown);
});</code>