web-dev-qa-db-fra.com

Appel Jquery / Ajax avec minuterie

J'ai une page php qui fait écho aux lignes d'une base de données. Je veux l'appeler via jquery/ajax toutes les 30 secondes. Mais je veux également pouvoir appeler la page à tout moment afin que si j'ajoute un enregistrement via le formulaire, une fois le formulaire soumis, je souhaite que la page via soit appelée à ajax pour mettre à jour les résultats immédiatement. Quelqu'un peut-il m'orienter dans la bonne direction ou fournir un code de base pour que je puisse essayer de comprendre cela? Encore très nouveau pour jquery/ajax.

42
John

Si vous souhaitez définir quelque chose sur une minuterie, vous pouvez utiliser les méthodes setTimeout ou setInterval de JavaScript:

setTimeout ( expression, timeout );
setInterval ( expression, interval );

expression est une fonction et timeout et interval sont des entiers en millisecondes. setTimeout exécute le temporisateur une fois et exécute le expression une fois tandis que setInterval exécutera le expression chaque fois que le interval passe.

Donc, dans votre cas, cela fonctionnerait comme ceci:

setInterval(function() {
    //call $.ajax here
}, 5000); //5 seconds

En ce qui concerne l'Ajax, voir la méthode ajax() de jQuery . Si vous exécutez un intervalle, rien ne vous empêche d'appeler la même ajax() à d'autres endroits de votre code.


Si vous voulez qu'un intervalle s'exécute toutes les 30 secondes jusqu'à ce qu'un utilisateur lance une soumission de formulaire ... puis crée un nouvel intervalle après cela, c'est également possible:

setInterval() renvoie un entier qui est l'ID de l'intervalle.

var id = setInterval(function() {
    //call $.ajax here
}, 30000); // 30 seconds

Si vous stockez cet ID dans une variable, vous pouvez alors appeler clearInterval(id) qui arrêtera la progression.

Ensuite, vous pouvez réactiver l'appel setInterval() après avoir terminé votre soumission de formulaire ajax.

69
treeface