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] Rafraichir une partie de la page toutes les secondes


Sujet :

AJAX

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut [AJAX] Rafraichir une partie de la page toutes les secondes
    Bonjour,

    Voici mon problème.
    Je dispose d'une page avec une table dans laquelle j'affiche un nombre aléatoire. Je voudrais faire en sorte que la cellule dans laquelle est affiché ce nombre se recharge toutes les secondes. Ne connaissant pas Ajax pour le moment, je ne sais pas du tout comment faire ça.

    Voici mon code pour l'instant:

    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
    <html>
    <head>
    	<script language="javascript" type="text/javascript">
    		URL = "http://localhost/Test/test_Ajax/test.php";
    		function rafraichir() {
    				if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    				else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
    				else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');
    				xhr.open('GET',URL,true);
    				xhr.onreadystatechange = ajaxReponse;
    				xhr.send(null);
    		}
     
    		function ajaxReponse() {
    				if (xhr.readyState == 4) {
    						document.getElementById("test_refresh",true).innerHTML=xhr.responseText; 
    						var timer=setTimeout("rafraichir()",1000); 
    				}
    		}
    </script>
     
     
     
    </head>
    <body onLoad="javascript:rafraichir();">
    <table>
    	<tr>
    		<td id="test_refresh">
    			<?php 
                            $nb_min = 1;
                            $nb_max = 100;
                            $nombre = mt_rand($nb_min,$nb_max);
                            
                            echo $nombre;
                            ?>
    		</td>
    	</tr>
    </table>			
    </body>
    </html>
    Merci à toute personne qui pourra m'indiquer comment régler mon problème.

    A+

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    Tu peux utiliser la fonction setInterval : http://javascript.developpez.com/faq...e=date#Horloge

    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Yeeees, merci beaucoup Nesmontou !!

    Ça marche bien comme je veux !!!!
    (et dire que mon problème se trouvait seulement là !!! )

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    J'crois que j'ai parlé un peu trop vite en fait. Le comportement est vraiment bizarre au bout de quelques secondes. Une partie de la page est "doublée".

    Cette page est une page de test (je découvre Ajax) mais lorsque je la met dans ma "vraie" page, le rafraichissement ne se fait plus.

    Voici mon code, si quelqu'un pouvait m'expliquer ce qui se passe, ce serait sympa.

    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
    <html>
    <head>
    	<script language="javascript" type="text/javascript">
    		URL = "http://localhost/Test/test_Ajax/test.php";
    		function rafraichir() {
    				if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    				else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
    				else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');
    				xhr.open('GET',URL,true);
    				xhr.onreadystatechange = ajaxReponse;
    				xhr.send(null);
    		}
     
    		function ajaxReponse() {
    				if (xhr.readyState == 4) {
    						document.getElementById("test_refresh",true).innerHTML=xhr.responseText; 
     
     
     
     
    						var timer=setInterval("rafraichir()",1000); 
    				}
    		}
    </script>
    </head>
    <body onLoad="javascript:rafraichir();">
    <table>
    	<tr>
    		<td id="test_refresh">
    			<?php 
                            $nb_min = 1;
                            $nb_max = 100;
                            $nombre = mt_rand($nb_min,$nb_max);
                            
                            echo $nombre;
                            ?>
    		</td>
    	</tr>
    </table>	
    ceci est une première phrase<br/>ceci est une seconde phrase
    <div style="position:absolute; top:100px; left:200px; height:100px; width:200px; border:1px solid #000000">
    div test
    </div>
    </body>
    </html>
    Merci beaucoup

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("test_refresh",true)
    c'est quoi ce paramètre true ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Ben je t'avouerai que je sais pas trop Bovino. C'est un code que j'ai récupéré à la base sur le net. C'est peut-être ça qui fait que cela fait n'importe quoi. Je vais essayer ce soir.

    Merci

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,

    +1 Bovino
    Utilise un setTimeout à la place de setInterval. Fait un recherche, il y a plusieurs discussion résolue .

    A+.

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Bonjour à tous

    D'abord merci pour vos conseils. Je procède par petites touches. Voici ce que donne mon code. J'ai viré le true, et remplacé setInterval par setTimeout. Ca marche pas mal.

    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
    <html>
    <head>
    	<script language="javascript" type="text/javascript">
    		URL = "http://localhost/Test/test_Ajax/test.php";
    		function rafraichir() {
    				if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    				else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
    				else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');
    				xhr.open('GET',URL,true);
    				xhr.onreadystatechange = ajaxReponse;
    				xhr.send(null);
    		}
     
    		function ajaxReponse() {
    				if (xhr.readyState == 4) {
    						document.getElementById("test_refresh").innerHTML=xhr.responseText; 
     
     
     
     
    						var timer=setTimeout("rafraichir()",1000); 
    				}
    		}
    </script>
    </head>
    <body onLoad="javascript:rafraichir();">
    <table>
    	<tr>
    		<td id="test_refresh">
    			<?php 
                            $nb_min = 1;
                            $nb_max = 100;
                            $nombre = mt_rand($nb_min,$nb_max);
                            
                            echo $nombre;
                            ?>
    		</td>
    	</tr>
    </table>	
    ceci est une première phrase<br/>ceci est une seconde phrase
    <div style="position:absolute; top:100px; left:200px; height:100px; width:200px; border:1px solid #000000">
    div test
    </div>
    </body>
    </html>
    Maintenant, j'ai 2 questions :
    - Pourquoi le texte "ceci est une première phrase / ceci est une seconde phrase" est il affiché 2 fois ??
    - La rafraichissement de ma cellule ne marche pas sous IE. Pourquoi ??

    Aime, j'ai déjà cherché mais j'ai pas trouvé. Peut être mal cherché...

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,
    Déclare xhr en variable globale ou passe le en paramètre de la fonction ajaxReponse().

    A+.

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Merci Aimé pour ta réponse.
    Est-ce que tu peux juste m'expliquer le but de cette manip' ?

    Merci

  11. #11
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    Salut,
    Le fait de ne pas mettre le mot clef var rend xhr global. Donc ça fonctionne.
    Le soucis sur IE est certainement dû au fait qu'il charge les pages depuis le cache et donc que le chiffre ne change pas.
    Pour éviter ça, il faut ajouter une astuce "anti-cache" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open('GET',URL+"?anticache="+new Date().getTime(),true);
    Pour les phrases en double, qu'y a-t-il dans test.php ? Il suffit qu'il y ait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
            $nb_min = 1;
            $nb_max = 100;
            $nombre = mt_rand($nb_min,$nb_max);
            
            echo $nombre;
    ?>

  12. #12
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Aaaah super merci Billy KiT. Je vais regarder ce que ta solution donne.

    Alors par contre, je suis complètement novice avec Ajax, je dois dire. Ma page test.php, c'est la page dont j'ai fourni le code (oui, tout ça. Du coup, je vois mieux d'ou vient mon erreur). J'ai l'impression que j'ai fait une petite bêtise alors...

    Du coup, pour que les choses soient vraiment claires dans mon esprit, que dois-je mettre dans ma variable URL ?

    Merci encore

  13. #13
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    Je crois que tu as brûlé beaucoup d'étapes ! C'est pas très bon.
    Si ta page s'appelle test.php, tu dois créer un autre fichier test2.php qui contient seulement le code comme noté dans le précédent message.
    Donc : URL = "test2.php" si dans le même répertoire.
    Il faut quand même absolument revoir les principes fondamentaux de AJAX avec les tutos .

  14. #14
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Merci beaucoup Billy KiT. Tout marche nickel !!

    Je m'en vais de ce pas lire quelques tutos ...

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 28/05/2011, 12h53
  2. [AJAX] Rafraichir une partie de la page en Ajax
    Par isitien dans le forum AJAX
    Réponses: 1
    Dernier message: 11/12/2010, 05h27
  3. [AJAX] rafraichir une partie d'une page
    Par gloglo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/05/2008, 10h31
  4. [AJAX] Recharger une partie de la page.
    Par salmoucha dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/04/2008, 16h42
  5. [Struts][Ajax]Rafraichir une partie d'une JSP
    Par jsl1 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 22/02/2006, 14h09

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