[英]jQuery ajax call with OpenWeatherMap - net::ERR_CONNECTION_REFUSED
[英]How to handle net::ERR_CONNECTION_REFUSED in 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', defaultOption);
console.log(errorThrown);
});
您可以使用$.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
回調。
看起來當 jqXHR.readyState(即 $.ajax(...).fail() 方法的第一個參數的 readyState 字段)為 0 時,表示發生了網絡錯誤。 但是,我無法通過 JavaScript 確定確切的網絡錯誤是什么。
我查看了 jQuery Ajax 代碼,並且 xhr.send()(即 XMLHttpRequest.send())方法(生成網絡錯誤)不會捕獲也不會拋出錯誤。 因此,不可能抓住它。
瀏覽器似乎檢測並顯示了正確的錯誤消息,但 jQuery 沒有注意到發生的特定類型的網絡錯誤。
所以, fail
,如果我們得到一個是被稱為ERR_CONNECTION_REFUSED
,但也沒有辦法真正明白為什么fail
被調用。 有沒有辦法檢測失敗方法內部為什么事情失敗? 即超時與連接被拒絕? 兩者之間存在差異。 一個我可以重試,另一個沒有區別。
您不需要設置超時來處理連接拒絕失敗。
<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>
如果您使用此失敗函數,它將陷入 jqXHR.status===0 條件。
.fail(function (jqXHR, exception) {
// Our error logic here
var msg = '';
if (jqXHR.status === 0) {
msg = 'No connection.\n Verify Network.';
//ERR_CONNECTION_REFUSED hits this one
} else if (jqXHR.status == 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status == 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
$('#info').html("<p class='alert alert-danger msg'>Error: " + msg + "</p>");
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.