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

JavaScript Discussion :

recharger une image après un timeout


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut recharger une image après un timeout
    Bonjour;
    Je dois recharger des images (qui peuvent éventuellement changer) sur une page de manière automatique et toutes les x secondes.
    Je me suis tourné vers le javascript (que je ne connais absolument pas :-S) en essayant d'associer un changement d'images après un timeout.
    J'ai essayé ce code intégré en haut de ma page:
    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
    <script type="text/javascript">
    	function reload() {
    		alert('oui');
    		URL = "/xymon/gifs/clear-recent.gif";
    		if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    		else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
    		else alert('JavaScript : Your nagigator does not support XMLHttpRequest objects');
    		xhr.open('GET',URL,true);
    		xhr.onreadystatechange = ajaxReponse;
    		xhr.send(null);
    	}
     
    	function ajaxResponse() {
    	alert('non');
    	if (xhr.readyState == 4) {
    		document.getElementById("turn_clear",true).innerHTML=xhr.responseText;
    		var timer=setTimeout("rafraichir()",5);
    		alert('ouioui');
    	}
    }
    </script>
    et je rajoute un id pour les images (id="turn_clear".
    Donc je suppose qu'au bout de 5 secondes, les images avec l'id turn_clear vont changer. Mais ce n'est pas le cas, et rien ne se passe :-S Même pas les alert!
    Quelqu'un pourrait me donner un début de piste?
    Merci!

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Je n'ai pas regardé l'ensemble dans le détail mais :

    ...deux paramètres pour un getElementById ? !?

    ... 5 secondes ? le "5" en second param de setTimeout est en millisecondes

    ...et pour préciser aussi : tu dis qu'aucun alert n'est exécuté ? (si même le premier ne l'est pas c'est bizarre : montre-nous où est appelée ta fonction reload)

  3. #3
    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 : 54
    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
    Inutile de passer par AJAX pour recharger une image
    Il suffit de réaffecter le src en ajoutant si besoin un timestamp en paramètre pour contourner le cache.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 679
    Points
    44 679
    Par défaut
    il est préférable de suivre cet ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xhr.onreadystatechange = ajaxReponse;
    xhr.open('GET',URL,true);
    xhr.send(null);

  5. #5
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Bonjour;
    Merci de vos réponses!
    Pour RomainVALERI: J'appelle ma fonction reload n'importe où en fait :-S Voici ce que ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <script type="text/tavascript">
    	alert();
    	var link=document.getElementByID('clear');
    	alert('link');
    //	var src=link.getAttribute('src');
    	var src = link.src;
    	link.setAttribute('src','/xymon/gifs/clear-recent.gif');
    </script>
    <TR><TD>AFC</TD><TD><A HREF=/xymon/multisites/multisites.html><IMG SRC=/xymon/gifs/red-recent.gif WIDTH=16 HEIGHT=16 BORDER=0 ALT=red TITLE=red id=clear></A></TD>
    Je pense que lorsque la fonction est appelée, elle attend le timeout, puis va chercher les éléments dont l'id est "clear" et ensuite charger l'image clear à la place?

    J'ai modifié le code javascript tenant compte de tes remarques:
    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
    function rafraichir() {
    		URL = "/xymon/gifs/clear-recent.gif";
    		if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    		else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
    		else alert('JavaScript : Your nagigator does not support XMLHttpRequest objects');
    		xhr.open('GET',URL,true);
    		xhr.onreadystatechange = ajaxReponse;
    		xhr.send(null);
    	}
     
    	function ajaxReponse() {
    	if (xhr.readyState == 4) {
    		document.getElementById("clear").innerHTML=xhr.responseText;
    		var timer=setTimeout("rafraichir()",5000);
    	}
    et je l'inclus dans ma page dans le header:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script language="javascript" src="./reload.js"></script>
    Merci pour vos réponses!

  6. #6
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    pas de PHP s'il te plait

  7. #7
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    ooops désolé
    J'ai édité mon message précédent

    EDIT
    Je trouve bizarre que dans le code source de la page, la fonction javascript s'affiche après l'affichage des images, alors que dans mon code c'est le contraire.
    Je l'ai rajouté en bas de page (donc affichage dans le code source de la page tout à la fin) sans changement

    Merci pour ta réponse!

  8. #8
    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 : 54
    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
    Déjà, tu devrais essayer d'être plus rigoureux au niveau de la syntaxe HTML : même si c'est parfois autorisé, il est fortement conseillé de mettre les valeurs des attributs entre quotes, ça évite toute erreur d'interprétation par le navigateur, en particulier pour les URL.

    Ensuite, tu appelles une fonction qui fait ensuite référence à l'élément 'clear', mais au moment de l'appel de la fonction, l'élément clear n'existe pas dans la page.

    Ceci dit, encore une fois, passer par AJAX est une mauvaise idée : cela ne te permettra pas d'éviter la récupération depuis le cache (donc pas d'actualisation) et c'est lourd pour quelquechose qui peut se faire plus facilement, par exemple (pas testé) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="/xymon/gifs/red-recent.gif" onload="setTimeout(this.src = this.src.split('?')[0]+'?tt='+new Date().getTime()" />

  9. #9
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Inutile de passer par AJAX pour recharger une image
    Il suffit de réaffecter le src en ajoutant si besoin un timestamp en paramètre pour contourner le cache.
    Citation Envoyé par Bovino Voir le message
    Ceci dit, encore une fois, passer par AJAX est une mauvaise idée : cela ne te permettra pas d'éviter la récupération depuis le cache (donc pas d'actualisation) et c'est lourd pour quelquechose qui peut se faire plus facilement
    +2 avec la vache sacrée*

    Ici il n'y a rien à calculer ou récupérer côté serveur, tout est déjà présent côté client, donc autant faire l'économie d'un appel au serveur ^^


    * rhooô...

  10. #10
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Merci de vos réponses,

    J'ai essayé ton code Bovino, voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TD><FONT SIZE="+1" COLOR="#FFFFCC" FACE="Tahoma, Arial, Helvetica">AFC</FONT></TD><TD><CENTER><A HREF="/xymon/multisites/multisites.html"><IMG SRC="/xymon/gifs/red-recent.gif" ONLOAD="setTimeout(this.SRC=/xymon/gifs/green-recent.gif, 5000)" WIDTH="16" HEIGHT="16" BORDER="0" ALT="red" TITLE="red" id="clear"/></A></CENTER></TD>
    Mais aucun rechargement.

    Romain, en fait, les status peuvent changer, d'où par la suite un appel vers le serveur pour recharger le nouveau status (prochaine étape en fait).

  11. #11
    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 : 54
    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
    JavaScript est sensible à la casse, donc this.SRC != this.src et this.SRC n'existe pas.

Discussions similaires

  1. Recharger une image dans la cache
    Par Prophetis dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/07/2006, 13h24
  2. Réponses: 10
    Dernier message: 24/05/2006, 17h28
  3. affichage d'une image apres le chargement de la page
    Par Krubi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/04/2006, 16h44
  4. Affichage d'une image après insertion dans une base
    Par leloup84 dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 16h34
  5. Réponses: 3
    Dernier message: 06/07/2005, 13h57

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