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 :

Variable globale et XML


Sujet :

JavaScript

  1. #1
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut Variable globale et XML
    Bonjour à tous !

    Dans le cadre d'un projet, je cherche à récupérer des articles du site L'Équipe et les afficher.
    J'ai donc créer un fichier js qui contient une classe Article ayant pour attributs un titre, un lien et une date de publication.
    Le problème est le suivant : lorsque je cherche à remplir le tableau (sensé contenir tout les articles) hé bien celui est vide...

    Voici mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    class Article {
      constructor(titre, lien, date) {
        this.titre = titre;
        this.lien = lien;
        this.date = date;
      }
    }
     
    tab_art = Array();
     
    var init = function() {
      document.getElementById('art').innerHTML = ''; // On rends la section vide
     
      getArticleInfos();
      console.log(tab_art);
    }
     
    // Fonction qui recupère et affiche les titres et date de publications des artciles "L'Équipe"
    function getArticleInfos() {
      var xhr = new XMLHttpRequest();
      xhr.open('GET', 'https://www.lequipe.fr/rss/actu_rss_Football.xml', true);
      xhr.onload = function() {
       	var doc = xhr.responseXML;
       	var titres = doc.getElementsByTagName('title');
       	for (var i = 1; i <= titres.length; i++) {
        	   if (doc.getElementsByTagName('title')[i].firstChild.data.indexOf("L1") != -1) {
          		art = new Article(doc.getElementsByTagName('title')[i].firstChild.data, doc.getElementsByTagName('link')[i].firstChild.data, doc.getElementsByTagName('pubDate')[i].firstChild.data);
          		tab_art.push(art);
         	   };
       	};
      };
     
      xhr.send(null);
    }
     
    window.onload = init;
    Lors du console log j'obtiens simplement Array = [ ], alors que mon tableau devrait être rempli...
    Si quelqu'un a une idée d'où cela provient et ce que je dois modifié pour pouvoir avoir mon tableau rempli, je suis preneur!
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    la requête AJAX est asynchrone donc la fonction "getArticleInfos" se termine avant la réception des données.

    pour lire les données reçues, faites le "console.log" dans le code lancé par "onload"

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Attention à la structure du fichier XML, exemple d'utilisation :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
    	<!-- cache-control avec max-age=60 pour le développement uniquement -->
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
      <meta name="author" content="Daniel Hagnoul">
      <title>test</title>
      <style>
                    *,
                    *:after,
                    *:before {
                            box-sizing: border-box;
                    }
                    
                    /* CSS du test */
                    
     
                    /* Fin CSS du test */
     
      </style>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/locale/fr.js"></script>
      <script src="http://danielhagnoul.developpez.com/lib/dvjh/dvjhUtilities-1.4.0.js"></script>
    	<script>
        'use strict';
                    
        document.addEventListener( "DOMContentLoaded", ev => {
                            // le DOM est construit, la page web n'est pas visible
                            moment.locale( "fr" );
                            klog( `DOM ready   : ${ new kDvjhDate() }` );
                            
          // code du test
     
     
                            // fin code du test
          
        }, false );
        
        window.addEventListener( "load", ev => { 
                            // le DOM est construit et la page web est visible
                            klog( `Window load : ${ new kDvjhDate() }` );
                            
          // code du test
                            
                            let
                                    arArticles = [];
                                                                            
                            class Article {
                                    constructor( title, link, description, pubDate, enclosureURL, guid ){
                                            Object.assign( this, { title, link, description, pubDate, enclosureURL, guid } );
                                    }
                                    toString(){
                                            let str = "";
                                            
                                            str += "Titre : " + this.title + "\n";
                                            str += "Description : " + this.description + "\n";
                                            str += "Url : " + this.link;
                                            
                                            return str;
                                    }
                                    toHTML(){
                                            let str = "";
                                            
                                            str += "<p>Titre : " + this.title + "</p>";
                                            str += "<p>Description : " + this.description + "<a href=" + this.link + ">Voir l'article</p>";
                                            
                                            return str;
                                    }
                            }
                            
                            function getArticleInfos() {
                                    const
                                            xhr = new XMLHttpRequest();
                                    
                                    // attention à la structure du xml https://www.lequipe.fr/rss/actu_rss_Football.xml
                                    /*
                                     * <?xml version="1.0" encoding="UTF-8" ?>
                                     *      <rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom">
                                     *              <channel>
                                     *                      <atom:link href='https://www.lequipe.fr/rss/actu_rss_Football.xml' rel='self' type='application/rss+xml' />
                                                                    <title>L'Equipe.fr Actu Football</title>
                                                                    <link>https://www.lequipe.fr</link>
                                                                    <description>L'Equipe.fr, Toute l'actualité du football</description>
                                                                    <language>fr</language>
                                                                    <copyright>Copyright L'Equipe.fr</copyright>
                                                                    <pubDate>Sat, 21 Oct 2017 22:31:22 +0200</pubDate>
                                                                    <image>
                                                                            <url>http://www.lequipe.fr/rss/logo_RSS.gif</url>
                                                                            <title>L'Equipe.fr Actu Football</title>
                                                                            <link>https://www.lequipe.fr</link>
                                                                            <width>119</width>
                                                                            <height>28</height>
                                                                    </image>
                                                                    <item>
                                                                            <title>Foot - L1 - Monaco - Radamel Falcao (attaquant de l'AS Monaco) : «Rester fort mentalement»</title>
                                                                            <link>https://www.lequipe.fr/Football/Actualites/Radamel-falcao-monaco-rester-fort-mentalement/844365#xtor=RSS-1</link>
                                                                            <description>Radamel Falcao a apprécié la belle réaction monégasque après quatre... </description>
                                                                            <pubDate>Sat, 21 Oct 2017 22:21:00 +0200</pubDate>
                                                                            <guid>https://www.lequipe.fr/Football/Actualites/Radamel-falcao-monaco-rester-fort-mentalement/844365#xtor=RSS-1</guid>
                                                                    </item>
                                                                    <item>
                                                                            <title>Foot - L1 - Monaco - Keita Baldé (attaquant de l'AS Monaco) : «Une bonne connexion avec Falcao»</title>
                                                                            <link>https://www.lequipe.fr/Football/Actualites/Keita-balde-attaquant-de-l-as-monaco-une-bonne-connexion-avec-falcao/844362#xtor=RSS-1</link>
                                                                            <description>Keita Baldé a ouvert le score pour Monaco samedi face à  Caen (2-0).... </description>
                                                                            <pubDate>Sat, 21 Oct 2017 22:18:00 +0200</pubDate>
                                                                            <guid>https://www.lequipe.fr/Football/Actualites/Keita-balde-attaquant-de-l-as-monaco-une-bonne-connexion-avec-falcao/844362#xtor=RSS-1</guid>
                                                                    </item>
                                                                    <item>
                                                                            <title>Foot - L1 - Metz - Philippe Hinschberger : «Dangereux pour le club»</title>
                                                                            <link>https://www.lequipe.fr/Football/Actualites/Philippe-hinschberger-dangereux-pour-le-club/844360#xtor=RSS-1</link>
                                                                            <description>Sur la sellette, l'entraîneur du FC Metz s'est montré fataliste après... </description>
                                                                            <pubDate>Sat, 21 Oct 2017 22:15:00 +0200</pubDate>
                                                                            <enclosure url="https://medias.lequipe.fr/img-photo-jpg/hinschberger/1500000000847524/1468:104,2186:582-665-335-70/d64a5.jpg" length="50000" type="image/jpeg"/>
                                                                            <guid>https://www.lequipe.fr/Football/Actualites/Philippe-hinschberger-dangereux-pour-le-club/844360#xtor=RSS-1</guid>
                                                                    </item>
                                                                    ...
                                                            </channel>
                                                    </rss>
                                            */
                                    
                                    xhr.open( 'GET', 'https://www.lequipe.fr/rss/actu_rss_Football.xml', true );
                                    
                                    xhr.onload = function() {
                                            const
                                                    doc = xhr.responseXML,
                                                    items = Array.from( doc.querySelectorAll( "item" ) );
                                                    
                                            for ( const item of items ){
                                                    let
                                                            ObjArticle = new Article(
                                                                    item.querySelector( "title" ).textContent,
                                                                    item.querySelector( "link" ).textContent,
                                                                    item.querySelector( "description" ).textContent,
                                                                    item.querySelector( "pubDate" ).textContent,
                                                                    ( ( item.querySelector( "enclosure" ) != null ) ? item.querySelector( "enclosure" ).getAttribute( "url" ) : "vide" ),
                                                                    item.querySelector( "guid" ).textContent
                                                            );
                                                    
                                                    arArticles.push( ObjArticle );
                                            }
                                            
                                            const
                                                    elemMain = document.querySelector( "main" ),
                                                    elemArticle = document.createElement( "article");
                                                    
                                            for ( const obj of arArticles ){
                                                    let article = elemArticle.cloneNode();
                                                    article.innerHTML = obj.toHTML();
                                                    elemMain.appendChild( article );
                                            }
                                    };
                             
                                    xhr.send( null );
                            }
                            
                            getArticleInfos();
                            
                            // fin code du test
     
          kIDUnique();
        }, false );
      </script>
    </head>
    <body>
    	<main>
     
    	</main>
    </body>
    </html>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/04/2011, 21h11
  2. Analyseur XML et variable globale
    Par eppo81 dans le forum Langage
    Réponses: 1
    Dernier message: 18/05/2009, 15h32
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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