2009-08-29 28 views
6

Se voglio una pagina intera per ricaricare ogni n secondi, avrei messo qualcosa di simile nel codice HTML: meta http-equiv="refresh" content="5"come programmare chiamate ajax ogni N secondi?

Esiste una pratica standard per fare lo stesso tipo di cosa per chiamate AJAX? Voglio programmare una chiamata AJAX da pronunciare ogni 10 secondi per aggiornare parti della pagina, senza aggiornare l'intera pagina. Sarebbe ancora meglio se potessi programmare più chiamate AJAX in momenti diversi, poiché alcune parti della pagina potrebbero dover essere aggiornate più spesso di altre.

TIA

+2

Dal setTimeout e setInterval sono già stati menzionato, probabilmente dovresti dare un'occhiata alle note di John Resig su come funzionano i timer in JavaScript - http://ejohn.org/blog/how-javascript-timers-work/ –

+0

Guardando la libreria jQuery - sembra che ci sia un plug-in progettato per fare esattamente quello che cercavo: http://www.360innovate.co.uk/blog/2009/03/periodical updater-for-jquery/ – aaa90210

risposta

11

Si potrebbe usare setTimeout o setInterval (quest'ultima è probabilmente più adatto a ciò che si vuole fare).

setInterval(makeRequest, (10 * 1000)); 

... dove makeRequest è una funzione che ricarica alcuni contenuti tramite la tecnologia AJAX.

+1

Se si esegue questa operazione, farei in modo di verificare che la precedente richiesta sia terminata prima di iniziarne un'altra. Non vuoi accumulare richieste se c'è ritardo di rete. – jtbandes

+0

@jtbandes: buon punto. Tuttavia, questa logica andrebbe probabilmente nella funzione "makeRequest". –

+0

@jtbandes: grazie per il suggerimento. – aaa90210

4
function proxy() 
{ 
    /* implement call to your Ajax method */ 
} 

setInterval(proxy, 1000); // last arg is in milliseconds 
1
You can use serInterval method of javascript: 
Just write down the lines at the bottom of your page: 

<script> 
window.setInterval(function(){ 
    ajaxCallFunction(); //calling every 5 seconds 
}, 5000); 

function ajaxCallFunction(){ 
    //this function uses ajax to interact with the server 
} 
<script> 
0

suppongo che ci sia un servlet con pattern URL /UpdateCount è configurato in web.xml per fornire dati dinamici/contenuti e non v'è un elemento div countStatDiv nella pagina JSP.

Il seguente codice rinfresca/aggiorna il contenuto del countStatDiv a ogni 30 secondi utilizzando il metodo GET e variabili secondi valore può essere modificato a seconda delle necessità:

   <script> 
        var request; 
        var seconds=30; 
        function getRequestObject(){ 
        setInterval(function() {sendRequest();},seconds*1000); 
        if (window.ActiveXObject){ 
        return (new ActiveXObject("Microsoft.XMLHTTP")); 
        } else if (window.XMLHttpRequest){ 
        return(new XMLHttpRequest()); 
        } else { 
        return (null); 
        } 
        } 
        function sendRequest(){ 
        request = getRequestObject(); 
        request.onreadystatechange = handleResponse; 
        request.open("GET", "../UpdateCount", true); 
        request.send(null); 
        } 
        function handleResponse(){ 
        if((request.readyState == 4)&amp;&amp;(request.status == 200)){ 
        var serverResponse = request.responseText; 
        var statCtrl=document.getElementById("countStatDiv"); 
        statCtrl.innerHTML=serverResponse; 
        } 
        } 
       </script>