setTimeoutを使用しようとしています。5秒ごとに実行したいのですが、setTimeoutが呼び出されたときにすぐには実行しません。動作させることができません:
firsttime = true;
window.setTimeout(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
setTimeoutを使用しようとしています。5秒ごとに実行したいのですが、setTimeoutが呼び出されたときにすぐには実行しません。動作させることができません:
firsttime = true;
window.setTimeout(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
ページをwindow.location.reload()
作成すると、すべてのJavaScript変数とタイマーが失われます。ページが2回目に読み込まれると、firsttime
再び読み込まれますtrue
。
つまり、ユーザーが最初にページにアクセスしたときに、10秒後にページを更新しようとしているのです。その後、5秒ごとに更新します。問題は次のとおりです。HTTPはstatelssであり、ユーザーがページに入るたびに、それが初めてです。間にメモリや状態はありません。
あなたができることは次のとおりです。
CookieまたはHTTPセッションを使用して、ユーザーがすでにページに入ったことを覚えておいてください。初めてsetTimeout()
10秒で使用します。そのページの後続のすべてのエントリで、5秒を使用します(setInterval()
ここでは意味がありません)
10秒間待機してfirst.html
から、にリダイレクトしsecond.html
ます。同一ですが、ハードコードされた5秒の遅延があります。クエリパラメータまたはハッシュタグを使用して、状態を永続化することもできます。でも少しハッキー。
たまにページ全体を更新するのは2000っぽいです。ajaxと部分的なDOMの更新を検討してください。
setTimeout
一度だけ実行されます。
setInterval
Xミリ秒ごとに実行されます。
firsttime = true;
window.setInterval(function () {
if (!firsttime) {
window.location.reload();
}
firsttime = false;
}, 5 * 1000);
setIntervalを探しています。同じパラメータを取りますが、コールバックを1回ではなく、X秒ごとに実行します。
setTimeout
は1回だけ実行され、その時点では条件は(!firsttime)
保持されません(そのままなので、何も起こりません。firsttime
true
このチェックを残してもかまいません。関数はすぐには読み込まれません。最初の実行は、指定された遅延の後になります。
繰り返し実行する場合は、を確認してくださいsetInterval
。ただしwindow.location.reload();
、JavaScriptを含むページ全体をリロードするため、実行できるのは1回だけです(その後、ページがリロードされ、間隔がクリアされ、JSが再初期化され、別のタイムアウトインスタンスが使用されます)。
たぶん、あなたの場合、HTMLの更新がより役立つでしょう:
<meta http-equiv="refresh" content="5;url=yourwebpage">
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にリセットされるため