Javascript 如何处理jQueryAjax中的net::ERR\u连接被拒绝
我有这种javascript:Javascript 如何处理jQueryAjax中的net::ERR\u连接被拒绝,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有这种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',
$.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\u CONNECTION\u densed
-这很好,我只想处理这个问题。我在ajax调用中有.fail
,但它没有处理:ERR\u CONNECTION\u densed
在这种情况下,您能就如何处理:ERR\u CONNECTION\u densed
给出建议吗
我还试图将我的ajax调用包装到
try catch
块,但它也不起作用。您可以使用$的timeout
属性。ajax
触发错误
回调
这将确保如果服务器在特定的时间限制内没有响应,则会触发错误
回调
$.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);
});
这将在没有internet的情况下触发
fail
回调。因此,如果我们得到ERR\u连接被拒绝
,则调用fail
,但无法真正了解调用fail
的原因。有没有一种方法可以检测失败方法内部的失败原因?i、 e.超时与连接被拒绝?两者之间有区别。一个我可以重试,另一个没有区别
您不需要设置超时来处理连接被拒绝的故障。当jqXHR.readyState(即,$.ajax(…).fail()方法的第一个参数的readyState字段)为0时,似乎发生了网络错误。但是,我无法通过JavaScript确定确切的网络错误是什么 我已经看过jQueryAjax代码,xhr.send()(即XMLHttpRequest.send())方法(生成网络错误)既不会捕获错误,也不会抛出错误。因此,不可能抓住它 浏览器似乎检测并显示了正确的错误消息,但jQuery忽略了发生的特定类型的网络错误
<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>
您是否尝试了.error属性而不是.fail?请尝试在ajax选项中使用
timeout
属性来触发错误callback@RickHoving是的<代码>.error没有为这种情况触发。所以没有其他方法了?你知道为什么cath不处理那个eror吗<代码>尝试{$.ajax({…});}catch(ex){}我可以确认,如果不显式设置timeout属性,就无法捕获此类问题。另一种方法是检查成功处理程序中的数据值,如果该值为空,则执行类似于错误处理程序的操作:在我的情况下,设置超时仍然会导致net::ERR\u CONNECTION\u拒绝
和fail
未运行。还有其他需要满足的条件吗?@sreginogemoh关于try{}catch块,它们对同步代码很有用。使用异步ajax调用,运行代码并注册回调。这些在几秒钟后被触发,而不会阻塞其余的代码,因此当http promise对象被满足或拒绝时,您的try{}catch块已经完成运行。@mohamedrias:我喜欢这个主题,但我也有同样的问题。我尝试使用timeout,但是:它在超时之前失败,并且仍然有错误日志消息。.fail()被触发,因此这是50%的胜利。如果超时“失败”,函数的“error”参数将是“timeout”,而不是“error”