Yanıtlar:
Diğerlerinin de belirttiği gibi setInterval ve setTimeout işini görecektir. Paul Irish tarafından bu mükemmel videodan öğrendiğim biraz daha gelişmiş tekniği vurgulamak istedim: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
Yineleme aralığından daha uzun sürebilecek periyodik görevler için (yavaş bir bağlantıdaki HTTP isteği gibi) en iyisi kullanmamaktır setInterval()
. İlk istek tamamlanmadıysa ve başka bir istek başlatırsanız, paylaşılan kaynakları tüketen ve birbirinizi aç bırakan birden çok isteğinizin olduğu bir duruma düşebilirsiniz. Son istek tamamlanana kadar bir sonraki isteği planlamayı bekleyerek bu sorunu önleyebilirsiniz:
// 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);
});
})();
Basit olması için, planlama için başarı geri aramasını kullandım. Bunun olumsuz tarafı, başarısız bir isteğin güncellemeleri durdurmasıdır. Bundan kaçınmak için bunun yerine tam geri aramayı kullanabilirsiniz:
(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);
}
});
})();
Evet, çalıştırmak istediğiniz kodu çağırmak için JavaScript setTimeout()
yöntemini veya setInterval()
yöntemini kullanabilirsiniz. SetTimeout ile bunu şu şekilde yapabilirsiniz:
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);
});
Aşağıdaki kodu denedim,
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);
});
Bu, belirtilen aralıkta beklendiği gibi çalışmadı, sayfa tam olarak yüklenmedi ve işlev sürekli çağrıldı. Onun daha iyi çağırmak setTimeout(executeQuery, 5000);
dışında executeQuery()
, aşağıdaki gibi ayrı bir işlevde
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();
});
Bu tam olarak amaçlandığı gibi çalıştı.