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 :

[window.setTimeout] rafraîchissement via une donnée variable


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [window.setTimeout] rafraîchissement via une donnée variable
    Bonjour,

    Je me trouve face à un problème... Je tente depuis quelques jours (je ne suis pas un expert...) de faire en sorte de rafraîchir une <div> avec la fonction "window.setTimeout()".

    J'arrive parfaitement à rafraîchir celle-ci pour une période défini (en millisecondes), exemple (pour 30 sec.):

    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
    function file(fichier)
    {
    	if(window.XMLHttpRequest)
    	        xhr_object = new XMLHttpRequest();
    	else
    	        return(false);
    	xhr_object.open("GET", fichier, false);
    	xhr_object.send(null);
    	if(xhr_object.readyState == 4) return(xhr_object.responseText);
    	else return(false);
    }
    function loadme()
    {
    	texte = file('/dossier/monfichier.php');
    	document.getElementById('song').innerHTML = texte;
    }
    window.setTimeout("loadme()", 30000);
    mon problème est que je souhaiterais que cette fonction se fasse via une variable* à la place des 30000 millisecondes.

    *Variable de longueur différente (ex: 342000, 155000, 37000, etc.) et qui diminue jusqu’à 0.

    ce qui donnerait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.setInterval("loadme()", <?php echo $refresh ?>);
    Malheureusement ça ne "fonctionne pas".
    Enfin... la variable est bien écrite dans le code, mais lorsque je charge la page (via mon navigateur) et si je recharge pas celle-ci (ma page) le rafraîchissement se fait périodiquement à la valeur initialement récupéré au premier chargement de la page.
    Et non pas comme je le souhaiterais, en tenant compte de la variable (qui diminue).

    J'ai tenté d'ajouter la fonction "window.setinterval" sans meilleur résultat ou encore "window.clearTimeout" (pour réinitialiser ma précédente fonction) mais aucun changement.

    Quelqu'un aurait une idée de comment contourner ce soucis, afin de pouvoir automatiser le rafraîchissement de façon variable (sans rafraîchir toute la page) ?

    Merci d'avance (et bonne fête des père, pour ceux qui ont la chance de l'être )

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 021
    Points : 44 321
    Points
    44 321
    Par défaut
    Bonjour,
    passe par un variable initialisée que tu décrémentes à chaque appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var delaiTimer = 3000;
    setTimeout( function(){}, delayTimer);
    delaiTimer -= 100;
    voilà pour le principe, attention quand même aux riques potentiels lorsque la valeur sera faible.

    Tant que l'on y est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.setTimeout("loadme()", 30000);
    s'écrit avantageusement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // passage fonction par reference
    window.setTimeout( loadme, 30000);
    // passage via fonction anonyme si paramètre présent par exemple
    window.setTimeout( function( param){
        executeFonction( param);
      }, 30000);

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci NoSmoking pour ta réponse.

    J'ai apporté la modification concernant les guillemets qui n'avait pas leur raison d'être (merci).
    Cependant, j'ai peur ne pas avoir correctement saisi ce que tu m'indiques (ou avoir mal formulé ma demande).

    Ces informations que je souhaites récupérer sont le titre, et la pochette d'un morceau de musique (diffusé depuis une webradio), donc la durée d'un titre à l'autre est variable.

    J'aurais aimé qu'en chargeant la page la première fois ne plus avoir à le faire et que la pochette soit automatiquement mis à jour (sans "refresh" de la page mais uniquement de ma <div>).

    La variable (qui diminue) indique le temps qu'il reste avant que les informations soient mis à jour.

    Donc il n'y a qu'un seul appel (chargement de la page) ensuite je reste sur celle-ci.

    (J'aurais peut-être du poster ma question dans la partie AJAX ?)

    Merci encore une fois pour ton aide.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 021
    Points : 44 321
    Points
    44 321
    Par défaut
    Si je comprens bien
    - chargement de la page
    - requête Ajax après x ms
    - récupération data, dont y ms, et refresh de la DIV.
    - requête Ajax après y ms
    - ...ainsi de suite

    dans ce cas pourquoi ne pas récupérer un objet JSON plutôt que du HTML

    à titre d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var reponse = '{"titre":"Le titre de la chanson", "auteur":"nom auteur", "delai":3000}';
    var oJson = window.JSON ? JSON.parse( reponse) : eval('(' + reponse + ')');
    var delaiTimer = oJson['delai'] *1;
    setTimeout( function(){
        alert( oJson['titre'] +'\n' +oJson['auteur']);
      }, delaiTimer);

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Eh bien, en fait la page que je charge comprend les informations (pochette, titre artiste) déjà mis en forme.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 021
    Points : 44 321
    Points
    44 321
    Par défaut
    Si tu peux intervenir sur la réponse faite tu peux toujours ajouter en fin de HTML les informations sur le délai et les récupérer coté client.

    à titre d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var oDest = document.getElementById('div_destination');
    var reponse = '<h3>Le titre de la chanson<\/h3><p>nom auteur<\/p>TIMER=3000'; // TIMER= est le séparateur
    var html = reponse.split('TIMER=');
    var delaiTimer = html[1] *1;
    oDest.innerHTML = html[0];
    setTimeout( function(){
        alert( 'Attention : rechargement!');
      }, delaiTimer);

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2013, 17h34
  2. Restaurer windows 7 OEM via une partition cachée
    Par mathieu_t dans le forum Windows 7
    Réponses: 4
    Dernier message: 19/03/2012, 11h15
  3. [AC-2007] Incrémentation du nom du variable via une autre variable !
    Par Spurius dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/04/2010, 14h16
  4. Réponses: 5
    Dernier message: 24/03/2009, 10h20
  5. [E-03] Insérer une image via une donnée elle même insérée par une autre
    Par Blop le bricoleur dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 24/10/2008, 16h10

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