0

我正在尝试使用 setTimeout。我希望它每五秒执行一次,但不是在调用 setTimeout 时立即执行。我无法让它工作:

firsttime = true;
window.setTimeout(function () {
    if (!firsttime) {
        window.location.reload();
    }
    firsttime = false;
}, 5 * 1000);
4

5 回答 5

6

一旦你window.location.reload()的页面,所有的 JavaScript 变量和计时器都会丢失。当页面第二次加载时,你firsttime又来true了。

所以你要做的是:当用户第一次进入页面时,10秒后刷新。然后每 5 秒刷新一次。问题是:HTTP是无状态的,用户每次进入页面都是第一次。两者之间没有记忆或状态。

你可以做的是:

  • 使用 cookie 或 HTTP 会话来记住该用户已经进入该页面。第一次使用setTimeout()需要 10 秒。在该页面上的每个后续条目上,您使用 5 秒(setInterval()在这里毫无价值)

  • 进入后first.html等待 10 秒并重定向到second.html. 相同,但硬编码 5 秒延迟。查询参数或哈希标签也可以用来保持状态。不过有点hacky。

  • 不时刷新整个页面是如此 2000-ish。考虑和部分 DOM 更新。

于 2012-08-22T17:31:51.970 回答
3

setTimeout只运行一次。

setInterval每 X 毫秒运行一次。

firsttime = true;
window.setInterval(function () {
    if (!firsttime) {
        window.location.reload();
    }
    firsttime = false;
}, 5 * 1000);
于 2012-08-22T17:30:28.757 回答
2

您正在寻找 setInterval。它采用相同的参数,但每 X 秒执行一次回调,而不是一次。

于 2012-08-22T17:30:14.083 回答
2

setTimeout只运行一次,此时条件(!firsttime)不成立(原样firsttimetrue所以什么也没有发生。

您可以留下这张支票。该功能不会立即加载。第一次执行将在指定的延迟之后。

如果您正在寻找重复执行,请检查setInterval. 但是你应该意识到window.location.reload();重新加载整个页面,包括其中的 JavaScript,所以它只能执行一次(然后重新加载页面,清除间隔并重新初始化 JS,并使用另一个超时实例)。

在您的情况下,也许 HTML 刷新会更有用:

<meta http-equiv="refresh" content="5;url=yourwebpage">
于 2012-08-22T17:34:23.713 回答
1
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

于 2012-08-22T17:31:13.290 回答