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 :

Déclenchement régulier d'une fonction


Sujet :

AJAX

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2003
    Messages : 111
    Points : 63
    Points
    63
    Par défaut Déclenchement régulier d'une fonction
    Avant tout je tiens a préciser que je suis un dev php et qu'enfin j'ai craqué pour me mettre à Javascript ce qui est vraiment indispensable aujourd'hui (vous pouvez me solliciter).

    C'est le principalement les fonctionalités AJAX qui m'interesse.

    Sur un site je voudrais afficher un petit point rouge avec le nombre de message non lu de la personne qui consulte à la manière de l'icone SMS sur Iphone.

    J'ai donc ecrit un petit bout de code en php qui donne ce nombre.

    En JS j'ai trois fonctions :
    La première interroge mon code php
    La seconde appelle la première et ecrit le resultat dans une div (je suis juste en test)
    La troisième devrait appeler la seconde régulièrement. Mais c'est la que je bloque. Le résultat ne se mets pas a jour (alors que si je le mets dans un <a onclick="start" ca marche).

    Code html : 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
    <!DOCTYPE html>
    <html>
    <body>
     
    <p id="demo"></p>
     
     
    <script type="text/javascript">
    function CombienNonLu()
            {
            var request = new XMLHttpRequest();
            var nbnonlu = false;
            request.open("GET", "/ajx/ajx_CombienNonLu.php", false);
            request.send(null);
            if(request.status == 200)
                    {
                    var nbnonlu = request.responseText;     
                    }
            return nbnonlu;
            }
            
    function ecritnbnonlu()
            {
            var nb = CombienNonLu();
            if(nb == false)
                    {
                    nb = 0; 
                    }
            document.getElementById('demo').innerHTML = nb;
            }
     
            
    function start()
            {
            intervalId = setInterval(ecritnbnonlu(), 2000);
            }       
    start();
    </script>
     
    </body>
    </html>

    Ou est ce que je me plante ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Cheorches Voir le message
    ...J'ai donc ecrit un petit bout de coude...
    Il va te falloir de l'huile de code...

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2003
    Messages : 111
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Il va te falloir de l'huile de code...
    C'est parce que j'écris avec mes pieds

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function start()
    {
    	window.setInterval(ecritnbnonlu, 2000);
    }	
    window.onload = start;
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function start()
    {
    	window.setInterval(function(){
    		ecritnbnonlu();
    	, 2000);
    }	
    window.onload = function(){
    	start();
    };
    Cela dit :
    • pas besoin de 3 fonctions
    • autant utiliser Ajax en asynchrone
    • + pense à utiliser "use strict";.


    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
    <script>
    "use strict";
    function CombienNonLu()
    {
    	var request = new XMLHttpRequest();
    	var nbnonlu = false;
    	nbnonlu = false;
    	// Ajax, asynchrone
    	request.onreadystatechange = function(){
    		if(request.readyState == 4 && request.status == 200){
    			nbnonlu = request.responseText;	
    			if(nbnonlu == false){ nbnonlu = 0; }
    			document.getElementById('demo').textContent = nbnonlu;
    		}
    	}
    	request.open("GET","/ajx/ajx_CombienNonLu.php",true);
    	request.send(null);
    }	
    window.onload = function(){
    	window.setInterval(function(){
    		CombienNonLu();
    	}, 2000);
    };
    </script>
    Dernière modification par Invité ; 05/11/2019 à 17h09.

  5. #5
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2003
    Messages : 111
    Points : 63
    Points
    63
    Par défaut
    jreaux62 merci beaucoup.

    Le fait de diviser en plusieurs fonctions était volontaire.

    Si je comprends bien setInterval est une méthode de l'objet window et non une fonction comme j'imaginais ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    A lire :

    S'il n'y a pas de formatage (balises HTML *), il est préférable d'utiliser .textContent plutôt que .innerHTML.
    * Ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			document.getElementById('demo').textContent = nbnonlu;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			document.getElementById('demo').innerHTML = '<b>'+nbnonlu+'</b>';

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/11/2014, 16h08
  2. Appel à une fonction à intervalle régulier
    Par Mozofeuk dans le forum Silverlight
    Réponses: 2
    Dernier message: 13/02/2012, 11h16
  3. [Débutant] Exécuter une fonction à intervales réguliers
    Par kikis09 dans le forum MATLAB
    Réponses: 5
    Dernier message: 11/02/2009, 15h54
  4. Appeler une fonction à interval régulier
    Par goomie dans le forum GTK+ avec Python
    Réponses: 5
    Dernier message: 11/10/2007, 00h21
  5. Réponses: 1
    Dernier message: 04/11/2006, 21h40

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