我已经有了下一个代码,用10秒从服务器获取的数据填充页面:
var refreshFunction = function() {
//get data from server
$.get("<c:out value="${baseURL}"/>/js/getCounts", function(data) {
vardata = data;
});
if (vardata != null) {
//divide
countArray = vardata.split("/");
//if server returns "-" or new array with new structure
if ((vardata == "-" || length != countArray.length)
&& !(document.getElementById('requestForm') instanceof Object)) {
//reload
location.reload();
clearInterval(refreshId);
} else {
//fill page with data
for (var j = 0; j <= countArray.length; j++) {
console.log(countArray[j]);
$('#badge_' + (j + 1)).text(countArray[j]);
}
}
}
};
$(document).ready(function() {
refreshId = setInterval(refreshFunction, 10000);
});
代码有效,但如果我打开应用程序然后关闭我的服务器,脚本将永远不会停止。我有
无法加载资源:net :: ERR_CONNECTION_REFUSED
我怎样才能抓住它并在那之后停止脚本?我试图用try
和catch(e)
包装代码块,但没有帮助。
答案 0 :(得分:2)
由于AJAX请求是异步执行的,因此将代码包装在try ... catch
中将不会捕获异常。在代码完成执行后发生异常。
您应该对$.get
返回的对象处理.fail
个案,以避免在控制台上看到该错误:
var jqxhr = $.get("<c:out value="${baseURL}"/>/js/getCounts", function() {
vardata = data;
})
.done(function() {
alert( "second success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "finished" );
});
作为旁注,您应该将函数的完整正文放在$.get
中的回调中。否则,您将始终使用旧数据集运行代码,而不是新代码。
在第一次执行时,您的代码中没有显示此问题,因为vardata
可能是undefined
,而在Javascript中,undefined != null
是false
。< / p>