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 :

Actualisation avec setInterval


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Events Manager
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Events Manager

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Actualisation avec setInterval
    Bonjour à toutes et à tous,

    J'ai un petit problème avec la fonction setInterval. Elle ne me fait pas l'actualisation d'un include. Je vais essayer d’expliquer le plus clairement possible.

    J'ai un fichier "now-playing.php" qui récupère les données JSON d'un serveur distant et qui les transforme en variable php. Ensuite sur la page de mon lecteur j'ai le code ci-dessous qui récupère le fichier "now-playing.php" et qui injecte les données dans les div.

    J'ai fais une boucle qui m'actualise le code toutes les 5 secondes... Les div s'actualisent (je le vois quand je sélectionne le texte, la sélection disparaît quand ça s'actualise). Le problème c'est que le texte ne change pas. Donc je suppose que le problème vient de l'include. Avez-vous une solution pour que l'include s'actualise également toutes les 5 secondes? Merci d'avance pour votre aide.

    PS: Ne vous moquez pas de mon bricolage, je suis débutant en Javascript

    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
    	function GetPlayingInfo() {
    		function GetNowPlayingFile() {
    			<?php include 'now-playing.php'; ?>
    		}
    			function NowPlaying() {
    				document.getElementById('previous-title').innerHTML = '<?php echo $previous_title ?>';
    				document.getElementById('previous-artist').innerHTML = '<?php echo $previous_artist ?>';
    				document.getElementById('now-title').innerHTML = '<?php echo $now_title ?>';
    				document.getElementById('now-artist').innerHTML = '<?php echo $now_artist ?>';
    				document.getElementById('next-title').innerHTML = '<?php echo $next_title ?>';
    				document.getElementById('next-artist').innerHTML = '<?php echo $next_artist ?>';
    			}
    			NowPlaying();
    	}
    	GetPlayingInfo();
     
    	setInterval(function() {
          GetPlayingInfo();
    }, 5000);

  2. #2
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Salut,
    A mon avis ce n'est pas avec setInterval que tu as des problèmes c'est avec l'imbrication de tes fonctions JS. Ca n'est pas interdit mais c'est pas facile à lire d'autant plus que ce que tu fais est FAUX !
    Au lieu de faire un return tu appelles la fonction. Tu génères une boucle sans fin et la console doit surement t'alerter sur ce point.
    Faire une include php au beau milieu d'une fonction js, ca pique les yeux.

    Pour vérifier si ton code js fonctionne, dans un premier temps, supprime ton code php et mets du texte en dur.

    Que contient ton fichier now-playing.php ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Events Manager
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Events Manager

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse.

    Voici ce que contient le fichier now-playing.php:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $json = file_get_contents("https://***/now-playing");
    //var_dump(json_decode($json));
     
    $parsed_json = json_decode($json);
     
    $previous_title = $parsed_json->previous->title;
    $previous_artist = $parsed_json->previous->artist;
    $now_title = $parsed_json->now->title;
    $now_artist = $parsed_json->now->artist;
    $next_title = $parsed_json->next->title;
    $next_artist = $parsed_json->next->artist;

    Le code PHP et JS fonctionne, il me met bien la piste précédente, la piste actuelle, et la piste suivante. C'est juste le problème qu'il n'actualise pas automatiquement malgré le setInterval. Quand j'actualise manuellement via le navigateur c'est OK, les pistes changent. Si je fais démarrer la fonction setInterval dès le début, pendant les 5 premières secondes les div sont vident et ensuite les pistes s'affichent. La console m'indique aucun avertissement ou erreur.

    Même moi qui suis débutant en JS ça me pique les yeux aussi de voir ce include là au milieu. Quelle solutions serait la meilleure pour remplacer ce include? J'ai essayé d'importer avec AJAX mais ça n'a pas fonctionné... Faut que je fasse un petit peu de lecture à ce sujet.

  4. #4
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Ca fonctionne 1 fois parce qu'il y a une permissivité de la part de js mais j'en doute.
    On ne peut pas "mélanger" du php et du js, c'est pas possible.

    Ca ne m'étonne pas que la mise à jour ne s'effectue pas, le php est statique en l’occurrence et tu essaies de mettre à jour des div avec des variables qui ne changent pas de valeur.

    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
    <?php
    $json = file_get_contents("https://***/now-playing");
    $parsed_json = json_decode($json);
     
    $previous_title = $parsed_json->previous->title;
    $previous_artist = $parsed_json->previous->artist;
    $now_title = $parsed_json->now->title;
    $now_artist = $parsed_json->now->artist;
    $next_title = $parsed_json->next->title;
    $next_artist = $parsed_json->next->artist;
    ?>
     
    <script>
    function GetPlayingInfo() {
            document.getElementById('previous-title').innerHTML = '<?php echo $previous_title ?>';
            document.getElementById('previous-artist').innerHTML = '<?php echo $previous_artist ?>';
            document.getElementById('now-title').innerHTML = '<?php echo $now_title ?>';
            document.getElementById('now-artist').innerHTML = '<?php echo $now_artist ?>';
            document.getElementById('next-title').innerHTML = '<?php echo $next_title ?>';
            document.getElementById('next-artist').innerHTML = '<?php echo $next_artist ?>';
    }
     
    setInterval(function() {
        GetPlayingInfo();
    }, 5000);
    </script>

    Ca ne peut pas être mis à jour, tes variables PHP sont statiques

    Je ne vois que de l'ajax pour permettre cette mise à jour de façon automatique.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Events Manager
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Events Manager

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Problème résolu avec 2 solutions possible! Merci pour ton aide.

    La 1ère solutions a été d'utiliser getJSON et YQL, car le JSON n'est pas sur le même serveur (problème avec Access-Control-Allow-Origin).

    Ensuite j'ai trouvé une 2e solutions, beaucoup plus simple, que j'ai retenue et que je montre ci-dessous afin d'aider d'autres personnes.

    Le fichier now-playing.php qui récupère les infos du JSON:
    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
    <?php
     
    $json = file_get_contents("https://***/now-playing");
    //var_dump(json_decode($json));
     
    $parsed_json = json_decode($json);
    ?>
     
    <div id="previous-title"><?php echo $parsed_json->{'previous'}->{'title'}; ?></div>
    <div id="previous-artist"><?php echo $parsed_json->{'previous'}->{'artist'}; ?></div>
    <div id="now-title"><?php echo $parsed_json->{'now'}->{'title'}; ?></div>
    <div id="now-artist"><?php echo $parsed_json->{'now'}->{'artist'}; ?></div>
    <div id="next-title"><?php echo $parsed_json->{'next'}->{'title'}; ?></div>
    <div id="next-artist"><?php echo $parsed_json->{'next'}->{'artist'}; ?></div>
    Donc j'ai supprimé les variables et j'ai ajouté des div ID.

    Dans la page du player j'ai ajouté ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function getPlayingInfo() {	
    	$( "#previous-title" ).load( "now-playing.php #previous-title" );
    	$( "#previous-artist" ).load( "now-playing.php #previous-artist" );
    	$( "#now-title" ).load( "now-playing.php #now-title" );
    	$( "#now-artist" ).load( "now-playing.php #now-artist" );
    	$( "#next-title" ).load( "now-playing.php #next-title" );
    	$( "#next-artist" ).load( "now-playing.php #next-artist" );
    };
    getPlayingInfo();
     
    setInterval(function() {
         getPlayingInfo();
    }, 5000);
    Donc ici je récupère les différents ID et les place dans les ID de la page du player.

    Encore un grand merci.

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

Discussions similaires

  1. Problème : Fonctions et commande Execute
    Par bubi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 11h01
  2. Problème fonction SDL
    Par seeme dans le forum SDL
    Réponses: 2
    Dernier message: 06/11/2005, 20h22
  3. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14
  4. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53
  5. Réponses: 2
    Dernier message: 20/08/2004, 17h10

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