使用以下代码检查互联网连接...
var checkstatus = 0
function checkConnection()
{
$.ajax({
url: "https://path/to/a/file.html",
data: { method: 'checkConnection'},
dataType: "html",
success: function(html)
{
clearInterval(checkstatus);
console.log('connection available');
return;
}
},
error: function(XMLHttpRequest, textStatus, errorThrown){
console.log('retrying');
checkstatus = setInterval(function(){checkConnection()},10000);
}
});
}
行clearInterval(checkstatus);
不起作用,因为脚本每10秒继续检查一次,为什么会这样?
答案 0 :(得分:5)
...但是间隔1仍在运行。
不要在错误响应中启动间隔。要么将其作为启动第一次checkConnection运行的方式,要么使用setTimeout
代替。
setTimeout
可能更好,因为它可以避免请求需要10秒以上才能获得响应的竞争条件。
答案 1 :(得分:1)
setInterval
设置一个每X秒运行一次的回调,并返回该回调的ID。您正在设置附加回调,以便在每次发生错误回调时运行,覆盖先前间隔的ID,但不取消它。当你最终做取消一个internval时,它只是你创建的最后一个。
您的错误回调需要测试尚未调用setInterval
:
if (checkstatus == 0)
checkstatus = setInterval(function(){checkConnection()},10000);
答案 2 :(得分:0)
我认为如果您使用setTimeout
而不是setInterval
会更容易,而且您不需要使用清除它。