Respostas:
Como outros indicaram, setInterval e setTimeout resolverão o problema. Queria destacar uma técnica um pouco mais avançada que aprendi neste excelente vídeo de Paul Irish: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
Para tarefas periódicas que podem demorar mais do que o intervalo de repetição (como uma solicitação HTTP em uma conexão lenta), é melhor não usar setInterval()
. Se a primeira solicitação não foi concluída e você inicia outra, pode acabar em uma situação em que há várias solicitações que consomem recursos compartilhados e deixam umas às outras com fome. Você pode evitar esse problema esperando para agendar a próxima solicitação até que a última seja concluída:
// 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);
});
})();
Para simplificar, usei o retorno de chamada de sucesso para agendamento. O lado negativo disso é que uma solicitação com falha interromperá as atualizações. Para evitar isso, você pode usar o retorno de chamada completo:
(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);
}
});
})();
Sim, você pode usar o setTimeout()
método JavaScript ou o setInterval()
método para invocar o código que deseja executar. Veja como você pode fazer isso com 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);
});
Tentei o código abaixo,
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);
});
Isso não funcionou como esperado para o intervalo especificado, a página não carregou completamente e a função foi chamada continuamente. É melhor ligar para setTimeout(executeQuery, 5000);
fora executeQuery()
em uma função separada como abaixo,
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();
});
Isso funcionou exatamente como pretendido.