2009-05-29 7 views

Répondre

1

Cela devrait fonctionner:

function loadResults(){ 
    $('div.to.update').load('yourpage.php') 
    setTimeOut(arguments.callee, 10000) 
} 

loadResults() 

Comment ça marche:

$('div.to.update').load('yourpage.php') 

Cette ligne fait un appel ajax à 'yourpage.php' et remplit la div avec les résultats de cette page (note que le résultat de l'appel yourpage ne doit pas être une page entière mais juste un extrait)

setTimeOut(arguments.callee, 10000) 

horaires de setTimeOut un appel de fonction dans le futur, dans ce cas 10 secondes. la fonction appeler sa fonction elle-même, tirée de la variable 'arguments' à laquelle chaque fonction a accès. C'est comme une fonction récursive, mais avec un retard de 10 secondes. Enfin, vous appelez la fonction pour la première fois pour démarrer la boucle.

EDIT:

vous pouvez également appeler la fonction setInterval() si vous avez besoin d'arrêter la boucle plus tard, faire ceci:

function loadResults(){ 
     $('div.to.update').load('yourpage.php') 
    } 

    var interval_id = setInterval(loadResults,10000) 

    // Later on when you want to stop the refresh... 

    clearInterval(interval_id) 
+0

c'est très élégant – chris

1

Vous avez besoin d'un programme de mise à jour périodique. Quelque chose comme:

function callMeAtInterval() 
{ 
    $.ajax({ 
        method: 'get', 
        url : 'status.php', 
        dataType : 'text', 
        success: function (text) { $('#updateMe').html(text); } 
       }); 

} 
//causes callMeAtInterval() to get called every 5 seconds. 
var holdTheInterval = setInterval(callMeAtInterval, 5000); 

fonction de jQuery $.ajax obtient la sortie de la ressource spécifiée par url, et le rappel de succès vous permet de faire un peu de traitement des résultats, dans l'exemple ci-dessus:

('#updateMe').html(text); 

remplit l'élément de page de l'ID updateMe avec le texte renvoyé par le serveur.

+0

+ 1 sur place, vous me battez dessus – bendewey

+0

Je trouve incroyable que cela puisse avoir deux downvotes. Deux! est-ce vraiment inutile? – karim79

+0

J'ai aussi deux downvotes! WTF! –

0

Il convient de noter que setInterval exécutera cette fonction tous les 5 secondes (dans l'exemple karim79 fourni) indépendamment de la progression des requêtes AJAX en attente. Si la première requête prend 3 secondes à compléter, setInterval enverra la requête suivante 2 secondes plus tard, et non 5. Si vous voulez réellement qu'il y ait 5 secondes entre une actualisation réussie et la requête suivante, vous pouvez utiliser setTimeout dans le success fonction de rappel. Cela ressemble à ceci:

function callMeAtInterval() { 
    $.ajax({ 
     method: 'get', 
     url : 'status.php', 
     dataType : 'text', 
     success: function (text) { 
      $('#updateMe').html(text); 
      setTimeout(callMeAtInterval, 5000); 
      } 
    }); 

} 

L'inconvénient de cette approche est que l'on a échoué setTimeout signifie que la section ne sera pas rafraîchi à nouveau.

+0

Ceci, je crois est la meilleure solution! –