我们有一个显示板,需要每秒钟更新一次。对服务器的AJAX调用会触发一个存储过程,这是一个非常简单的SELECT语句,执行只需毫秒。
最初,由于网络延迟(或太阳黑子,或谁知道会发生什么),这个AJAX进程会(偶尔,很少)超时。通过调整处理计时器的方式和设置
timeout
到0,我们有它,所以它现在运行稳定,超时从未发生。。。然而
尽管如此,我还是很紧张
能够
仍在发生。如果发生这种情况,我们的目标就是继续下去。基本上,忽略超时,然后再试一次。。。永远不像MaxError、RetryLimit或TryCount等。
以下是我现在拥有的:
setTimeout(function run() {
// When the timer elapses, get the data from the server
GetData();
setTimeout(run, _refreshRate);
}, 1000);
function GetData() {
//console.log("Attempting to obtain the data...");
jQuery.ajax({
url: "something.ashx",
type: "GET",
contentType: 'application/json; charset=utf-8',
success: function(resultData) {
//console.log("Got the data.");
ParseJson(resultData);
// show the last refresh date and time
$('#refreshTime').html(GetDateTime());
},
error : function(xhr, textStatus, errorThrown) {
if (textStatus == 'timeout') {
//console.log("Timeout occured while getting data from the server. Trying again.");
// If a timeout happens, DON'T STOP. Just keep going forever.
$.ajax(this);
return;
}
},
timeout: 0,
});
}
里面的一切
ParseJson(resultData);
效果很好。没有问题。而且计时器已经设置好了(我相信),所以它会等到一个GetData()完成后再尝试启动另一个。
我相信通过设置
超时
到
0
意思是“永远不要超时”
我的问题是:
我是否正确处理了
error
超时?我正在使用此帖子中选择的答案作为指导:
What's the best way to retry an AJAX request on failure using jQuery?
但我不需要再犯限制。
我还研究了这些线程:
How to make the Ajax call again in case Time out error occurs
ajax timeout callback function
我
认为
我已经把所有的信息归结为一个简单的解决方案,但我想要一些同行评议。有没有更好的方法?