Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258

    Richiamare funzione ogni x secondi

    Salve, ho la necessità di aggiornare un div con dei dati che prelevo da un db tramite una chiamata ajax, fin qui è tutto ok, siccome i dati potrebbe cambiare in fretta ho la necessità di richiamare la funzione che aggiorna il div, in modo da visualizzare sempre i dati aggiornati. Ho pensato di utilizzare

    codice:
    setInterval(function(){ //chiamata ajax etc... }, 5000);
    In questo modo una volta richiamata la funzione questa si ripete ogni 5 secondi. Secondo voi questa è la soluzione migliore? interrogando il db ogni 5 secondi rischierei di rallentare il tutto?

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Premessa: Dipende molto dalla mole di dati che interroghi e dal traffico generato dal sito.
    L'approccio più preformante e immediato ritengo sia usare node.js (framework js lato server) valuta se è il caso

    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Quote Originariamente inviata da sixdas Visualizza il messaggio
    Secondo voi questa è la soluzione migliore?
    No. Con AJAX meglio evitare il setInterval: meglio una chiamata ricorsiva di setTimeout…:

    codice:
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>AJAX setTimeout Example</title>
    <script type="text/javascript">
    var dataUpdater = new (function () {
    
        function sendRequest () {
            oReq.open("GET", "dati.txt", true);
            oReq.send();
        }
    
        function reqListen () {
          alert(this.responseText); // trasforma l'alert in quello che vuoi fare realmente con quel responseText
    
          // Quest'istruzione deve rimanere l'ultima della funzione
          setTimeout(sendRequest, 5000);
        }
    
        function reqError (oErr) {
            alert("There has been an error");
        }
    
        var oReq = new XMLHttpRequest();
        oReq.onload = reqListen;
        oReq.onerror = reqError;
        this.start = sendRequest;
    
    })();
    
    onload = dataUpdater.start;
    </script>
    </head>
    
    <body>
    
    </body>
    </html>

    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Ciao, mi aiuti a capire, io avevo risolto in questo modo:

    Premendo un un bottone avvio la funzione temporizzata:
    codice:
    function StartChat(){    $('#result-chat').html('<div id="loader-chat"><img src="images/svg-loaders/loader-chat.svg" height="70" width="70"/></div>');
        tm = window.setInterval('ShowMessages()',4000);
        console.log('avvio chat');
    }// end StartChat
    Prelevo i messaggi dal database:

    codice:
    function ShowMessages() {    //Chiamata ajax
        $.ajax({
            //Imposto il tipo di invio dati
            type: "POST",
            //Invio i dati alla pagina php
            url: "http://sito.it/query.php",
            //Dati ricevuti in formato html
            dataType: "html",
            success: function(msg)
            {
                $("#result-chat").html(msg);
                $("#result-chat").fadeIn(1500);
      
                // debug
                console.log('Counter "ShowMessages"');
            },
            error: function()
            {
                console.log('Chiamata ajax fallita!');
            }
        });
    }// end ShowMessages
    Stop la funzione

    codice:
    function stopMessages(){
        window.clearInterval(tm);
        console.log('stop chat');
    }// end stopMessages

    Come posso convertirla nel tuo metodo?
    Ultima modifica di sixdas; 09-06-2015 a 20:28

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Quote Originariamente inviata da sixdas Visualizza il messaggio
    Come posso convertirla nel tuo metodo?

    JavaScript:

    codice:
    var dataUpdater = new (function () {
    
        function sendRequest () {
            oReq.open("GET", "http://sito.it/query.php", true);
            oReq.send();
        }
    
        function reqListen () {
            $("#result-chat").html(this.responseText);
            $("#result-chat").fadeIn(1500);
            console.log("Counter \"ShowMessages\"");
            nSession = setTimeout(sendRequest, 5000);
        }
    
        function reqError (oErr) {
            console.log("Chiamata ajax fallita!");
        }
    
        var
            nSession = -1, oReq = new XMLHttpRequest();
    
        oReq.onload = reqListen;
        oReq.onerror = reqError;
    
        this.start = function () {
            if (nSession !== -1) { return false; }
            sendRequest();
            return true;
        };
    
        this.stop = function () {
            clearTimeout(nSession);
            nSession = -1;
        };
    
    })();
    
    // Se non ti serve l'onload rimuovilo...
    onload = dataUpdater.start;


    HTML:

    codice:
    <span onclick="dataUpdater.stop();" style="color: #0000ff; text-decoration: underline; cursor: pointer;">Ferma il ciclo</span> |
    <span onclick="dataUpdater.start();" style="color: #0000ff; text-decoration: underline; cursor: pointer;">Avvia il ciclo</span>

    Ultima modifica di carlomarx; 13-06-2015 a 01:27
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.