Réponses:
Comme d'autres l'ont souligné, setInterval et setTimeout feront l'affaire. Je voulais souligner une technique un peu plus avancée que j'ai apprise de cette excellente vidéo de Paul Irish: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
Pour les tâches périodiques qui pourraient prendre plus de temps que l'intervalle de répétition (comme une requête HTTP sur une connexion lente), il est préférable de ne pas l'utiliser setInterval()
. Si la première demande n'est pas terminée et que vous en démarrez une autre, vous pourriez vous retrouver dans une situation où vous avez plusieurs demandes qui consomment des ressources partagées et se meurent de faim. Vous pouvez éviter ce problème en attendant de planifier la prochaine demande jusqu'à ce que la dernière soit terminée:
// 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);
});
})();
Pour plus de simplicité, j'ai utilisé le rappel de succès pour la planification. L'inconvénient est qu'une demande échouée arrêtera les mises à jour. Pour éviter cela, vous pouvez utiliser le rappel complet à la place:
(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);
}
});
})();
Oui, vous pouvez utiliser la setTimeout()
méthode ou la setInterval()
méthode JavaScript pour appeler le code que vous souhaitez exécuter. Voici comment vous pouvez le faire avec 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);
});
J'ai essayé le code ci-dessous,
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);
});
Cela n'a pas fonctionné comme prévu pendant l'intervalle spécifié, la page ne s'est pas chargée complètement et la fonction a été appelée en continu. Il est préférable d'appeler l' setTimeout(executeQuery, 5000);
extérieur executeQuery()
dans une fonction distincte comme ci-dessous,
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();
});
Cela a fonctionné exactement comme prévu.