回答:
他の人が指摘したように、setIntervalとsetTimeoutがうまくいきます。私は、ポールアイリッシュによるこの優れたビデオから学んだもう少し高度なテクニックを強調したいと思いました。http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
繰り返しの間隔よりも時間がかかる可能性のある定期的なタスク(遅い接続でのHTTPリクエストなど)の場合は、を使用しないことをお勧めしますsetInterval()
。最初のリクエストが完了していない状態で別のリクエストを開始すると、複数のリクエストが共有リソースを消費して互いに飢餓状態になる可能性があります。この問題を回避するには、最後のリクエストが完了するまで次のリクエストのスケジュールを待機します。
// Use a named immediately-invoked function expression.
(function worker() {
$.get('ajax/test.html', function(data) {
// Now that we've completed the request schedule the next one.
$('.result').html(data);
setTimeout(worker, 5000);
});
})();
簡単にするために、スケジューリングには成功コールバックを使用しました。これの欠点は、1つの失敗した要求が更新を停止することです。これを回避するには、代わりに完全なコールバックを使用できます。
(function worker() {
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(data);
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 5000);
}
});
})();
はい、JavaScript setTimeout()
メソッドまたはsetInterval()
メソッドを使用して、実行するコードを呼び出すことができます。次に、setTimeoutを使用してそれを行う方法を示します。
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
setTimeout(executeQuery, 5000); // you could choose not to continue on failure...
}
$(document).ready(function() {
// run the first time; all subsequent calls will take care of themselves
setTimeout(executeQuery, 5000);
});
私は以下のコードを試しました、
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
setTimeout(executeQuery, 5000); // you could choose not to continue on failure...
}
$(document).ready(function() {
// run the first time; all subsequent calls will take care of themselves
setTimeout(executeQuery, 5000);
});
これは指定された間隔で期待どおりに機能せず、ページが完全に読み込まれず、関数が継続的に呼び出されました。以下のように別の関数でsetTimeout(executeQuery, 5000);
外部を呼び出す方が良いですexecuteQuery()
、
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
updateCall();
}
function updateCall(){
setTimeout(function(){executeQuery()}, 5000);
}
$(document).ready(function() {
executeQuery();
});
これは意図したとおりに機能しました。