0

setTimeoutを使用しようとしています。5秒ごとに実行したいのですが、setTimeoutが呼び出されたときにすぐには実行しません。動作させることができません:

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

5 に答える 5

6

ページをwindow.location.reload()作成すると、すべてのJavaScript変数とタイマーが失われます。ページが2回目に読み込まれると、firsttime再び読み込まれますtrue

つまり、ユーザーが最初にページにアクセスしたときに、10秒後にページを更新しようとしているのです。その後、5秒ごとに更新します。問題は次のとおりです。HTTPはstatelssであり、ユーザーがページに入るたびに、それ初めてです。間にメモリや状態はありません。

あなたができることは次のとおりです。

  • CookieまたはHTTPセッションを使用して、ユーザーがすでにページに入ったことを覚えておいてください。初めてsetTimeout()10秒で使用します。そのページの後続のすべてのエントリで、5秒を使用します(setInterval()ここでは意味がありません)

  • 10秒間待機してfirst.htmlから、にリダイレクトしsecond.htmlます。同一ですが、ハードコードされた5秒の遅延があります。クエリパラメータまたはハッシュタグを使用して、状態を永続化することもできます。でも少しハッキー。

  • たまにページ全体を更新するのは2000っぽいです。と部分的なDOMの更新を検討してください。

于 2012-08-22T17:31:51.970 に答える
3

setTimeout一度だけ実行されます。

setIntervalXミリ秒ごとに実行されます。

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

setIntervalを探しています。同じパラメータを取りますが、コールバックを1回ではなく、X秒ごとに実行します。

于 2012-08-22T17:30:14.083 に答える
2

setTimeoutは1回だけ実行され、その時点では条件は(!firsttime)保持されません(そのままなので、何も起こりません。firsttimetrue

このチェックを残してもかまいません。関数はすぐには読み込まれません。最初の実行は、指定された遅延の後になります。

繰り返し実行する場合は、を確認してくださいsetInterval。ただしwindow.location.reload();、JavaScriptを含むページ全体をリロードするため、実行できるのは1回だけです(その後、ページがリロードされ、間隔がクリアされ、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秒でタイムアウトを呼び出すため、これは1回だけ実行されます。

window.setTimeout(function () {
}, 5 * 1000);

5秒ごとに実行し続けたい場合。setIntervalを使用します。

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

しかしその後; 10秒のsetTimeoutで十分です。

window.setTimeout(function () {
    window.location.reload();
}, 10 * 1000);

ページがリロードされると、変数firsttimeがtrueにリセットされるため

于 2012-08-22T17:31:13.290 に答える