我正在尝试使用 setTimeout。我希望它每五秒执行一次,但不是在调用 setTimeout 时立即执行。我无法让它工作:
firsttime = true;
window.setTimeout(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
我正在尝试使用 setTimeout。我希望它每五秒执行一次,但不是在调用 setTimeout 时立即执行。我无法让它工作:
firsttime = true;
window.setTimeout(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
一旦你window.location.reload()
的页面,所有的 JavaScript 变量和计时器都会丢失。当页面第二次加载时,你firsttime
又来true
了。
所以你要做的是:当用户第一次进入页面时,10秒后刷新。然后每 5 秒刷新一次。问题是:HTTP是无状态的,用户每次进入页面都是第一次。两者之间没有记忆或状态。
你可以做的是:
使用 cookie 或 HTTP 会话来记住该用户已经进入该页面。第一次使用setTimeout()
需要 10 秒。在该页面上的每个后续条目上,您使用 5 秒(setInterval()
在这里毫无价值)
进入后first.html
等待 10 秒并重定向到second.html
. 相同,但硬编码 5 秒延迟。查询参数或哈希标签也可以用来保持状态。不过有点hacky。
不时刷新整个页面是如此 2000-ish。考虑ajax和部分 DOM 更新。
setTimeout
只运行一次。
setInterval
每 X 毫秒运行一次。
firsttime = true;
window.setInterval(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
您正在寻找 setInterval。它采用相同的参数,但每 X 秒执行一次回调,而不是一次。
setTimeout
只运行一次,此时条件(!firsttime)
不成立(原样firsttime
,true
所以什么也没有发生。
您可以留下这张支票。该功能不会立即加载。第一次执行将在指定的延迟之后。
如果您正在寻找重复执行,请检查setInterval
. 但是你应该意识到window.location.reload();
重新加载整个页面,包括其中的 JavaScript,所以它只能执行一次(然后重新加载页面,清除间隔并重新初始化 JS,并使用另一个超时实例)。
在您的情况下,也许 HTML 刷新会更有用:
<meta http-equiv="refresh" content="5;url=yourwebpage">
if (!firsttime) {
window.location.reload();
}
firsttime = false;
这只会执行一次,因为您在 5 秒内调用超时:
window.setTimeout(function () {
}, 5 * 1000);
当您希望它每 5 秒执行一次时;使用 setInterval:
firsttime = true;
window.setInterval(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
但是之后; setTimeout 10 秒就足够了:
window.setTimeout(function () {
window.location.reload();
}, 10 * 1000);
因为当页面重新加载时变量 firsttime 将重置为 true