IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Intervalle de reload dans une page


Sujet :

AJAX

  1. #1
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut [AJAX] Intervalle de reload dans une page
    Bonjour,

    Je suis en train de coder une application qui doit afficher des informations toutes les 10s dans une page html.

    J'ai donc utilisé XMLHttpRequest pour faire appel à une page php qui va chercher les informations et les renvoi sous forme d'un XML qui sera traité puis les valeurs écrits dans le html.

    Le problème est que dès lors que la fonction ajax est appelée, l'intervalle de 10s n'est pas respecté. Du coup les zones sont re-loadées sans arrêt jusqu'à saturation du navigateur car au bout d'un moment, les réponses sont plus lentes que les appels.

    Voici mon code. Dans le fichier html, j'appelle ma fonction comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script type="text/javascript" src="templates/{$TPL}/js/stats.js" /></script>
                            <script type="text/javascript">
                            	setInterval("getStats()", 10000);
                            </script>
    Dans mon stats.js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    function getStats()
    {
        var xhr=null;
     
        if (window.XMLHttpRequest) {//on creer l'object ajax pour firefox 
            xhr = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) //pour IE
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
     
    	//fonction qui va recuperer le resultat le l'appel php
        xhr.onreadystatechange = function() { 
    		if(xhr.readyState == 4 )
    		{
    			UpdateTextBox(xhr);
    		}
     
    	};
        //on fait l'appel php
        xhr.open("GET", "stats.php", true);
        xhr.send(null);
    }
     
    function UpdateTextBox(xhr)
    {
    	var docXML= xhr.responseXML;
    	//on declare l'objet obj et items pour le reutiliser ensuite;
    	var obj;
    	var items;
     
    	items = docXML.getElementsByTagName("nbSearch");
    	obj = document.getElementById("nbSearch");
    	obj.value = items.item(0).firstChild.data;
     
    	items = docXML.getElementsByTagName("nbInfos");
    	obj = document.getElementById("nbInfos");
    	obj.value = items.item(0).firstChild.data;
     
    	items = docXML.getElementsByTagName("nbRatios");
    	obj = document.getElementById("nbRatios");
    	obj.value = items.item(0).firstChild.data;
     
    	items = docXML.getElementsByTagName("nbXML");
    	obj = document.getElementById("nbXML");
    	obj.value = items.item(0).firstChild.data;
     
    	items = docXML.getElementsByTagName("nbGen");
    	obj = document.getElementById("nbGen");
    	obj.value = items.item(0).firstChild.data;
     
    	items = docXML.getElementsByTagName("nbTemp");
    	obj = document.getElementById('nbTemp');
    	obj.value = items.item(0).firstChild.data;
    }
    Voilà. J'espère que vous pourrez me donner une astuce pour régler mon problème.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    tu peux mettre un variable inProcess , dont le but serai de ne pas renvoyer de requete ajax si la précédante n'est pas encore revenu.

    Par exemple, au début début de ton traitement ajax: inProcess=true.
    lors de la réponse, in process = false.

    dès que tu appelles ta fonction, si elle est inProcess, on ne fait rien, sinon on envoie l'paté

    juste une idée, en espérant que ca t'aide!

  3. #3
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut
    J'ai résolu mon problème. Un mauvais cache ... vidage de cache et zou, le code fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Recharger un tableau dans une page à partir d'une thickbox
    Par benthebest dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/10/2008, 11h24
  2. [AJAX] Div contenu dans une page ajax
    Par Xris dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/06/2007, 14h34
  3. [AJAX] Des fenetres flottantes dans une page
    Par localhost dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/05/2007, 12h25
  4. [AJAX] Rafraichissement d'un fichier texte inclu dans une page
    Par gforce dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/01/2007, 11h41
  5. [AJAX] Saut de ligne dans une page html
    Par rapace dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/02/2006, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo