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

jQuery Discussion :

Mise à jour variable globale


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut Mise à jour variable globale
    Bonjour, j
    j'ai une fonction qui lit un fichier xml (litDonnees(), après le lecture de ce fichier, je dois mettre à jour un objet valeursCourantes avec les données lues en xml.
    Problème, tant que je reste dans ma fonction litDonnees, les console.log me renvoient bien les données lue en xml.
    une fois en dehors de cette fonction, quand j'essaie de faire un console.log plusieurs essaie comme ci-dessous, j'ai un undefined pour litDonnees.

    mon xml:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="utf-8"?>
    <meteo xsi:noNamespaceSchemaLocation="XSD.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <vent>41</vent>
      <pression>1040</pression>
      <temp>-6</temp>
      <visibilite >4.2</visibilite>
      <nuage>apocalypse</nuage>
    </meteo>

    mon JS:
    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
    //table d'association des valeurs
    var valeursCourantes = {
        temp : -42,
        vent : 10,
        visibilite : 5,
        pression : 1013,
        nuage : "gris"
      }
     
    //lecture d'un document xml et affichage dans la console
    function litDonnees() {
        $.get("donnees.xml", function(xmlDocument) {
            //console.log(xmlDocument)
            $(xmlDocument).find("meteo").each (function() {
                valeursCourantes.vent = $(this).find("vent").text();
                console.log(valeursCourantes.vent);
                valeursCourantes.pression = $(this).find("pression").text();
                console.log(valeursCourantes.pression);
                valeursCourantes.temp = $(this).find("temp").text();
                console.log(valeursCourantes.temp);
                valeursCourantes.visibilite = $(this).find("visibilite").text();
                console.log(valeursCourantes.visibilite);
                valeursCourantes.nuage = $(this).find("nuage").text();
                console.log(valeursCourantes.nuage);
                var donnees = {
                    vent: valeursCourantes.vent,
                    pression: valeursCourantes.pression,
                    temp: valeursCourantes.temp,
                    visi: valeursCourantes.visibilite,
                    nuage: valeursCourantes.nuage
                };
                return donnees;
            })  
        }, "xml");
    }
    console.log(litDonnees().vent);
    console.log(litDonnees().donnees.vent);
    J'ai relu la portée des variables et sur mais rien n'y fait.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Salut,

    C'est un problème de synchronisation, parce que la fonction litDonnees est asynchrone, et quand tu fais appel à celle-ci, elle prend un peu de temps (en millisecondes...) pour récupérer les valeurs du xml.

    Il faut soit mettre le code qui utilise les nouvelles valeurs de valeursCourantes dans le callback de get ou bien utiliser les promesses avec $.when et $.Deferred.

    Edit : essaies ceci (avec les promesses) :
    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
     
    var valeursCourantes = {
    		temp : -42,
    		vent : 10,
    		visibilite : 5,
    		pression : 1013,
    		nuage : "gris"
    	  }
     
    //lecture d'un document xml et affichage dans la console
    function litDonnees() {
    	var donnees,deferred=$.Deferred();
    	$.get("donnees.xml", function(xmlDocument) {
    		 $(xmlDocument).find("meteo")
    		 .each (function() {
    			valeursCourantes.vent = $(this).find("vent").text();
    			valeursCourantes.pression = $(this).find("pression").text();
    			valeursCourantes.temp = $(this).find("temp").text();
    			valeursCourantes.visibilite = $(this).find("visibilite").text();
    			valeursCourantes.nuage = $(this).find("nuage").text();
    			donnees = {
    				vent: valeursCourantes.vent,
    				pression: valeursCourantes.pression,
    				temp: valeursCourantes.temp,
    				visi: valeursCourantes.visibilite,
    				nuage: valeursCourantes.nuage
    			};
    			deferred.resolve(donnees); 
    		});
     
    	}, "xml");
    	return deferred.promise();
    }
     
    //Extraction des données avec $.when $.then :
    $.when(litDonnees()).then(function(d){
    	console.log('d.vent :',d.vent
    		,', d.pression :',d.pression
    		,', d.temp :',d.temp);
    });

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut
    Bonsoir, merci pour ta réponse.

    Du coup, j'essaie avec le code suivant pour modifier mes valeursCoutantes, mais elles ont toujours leurs valeur initiales.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Extraction des données avec $.when $.then :
    var data=$.when(litDonnees()).then(function(d){
        valeursCourantes.vent = d.vent;
        valeursCourantes.pression = d.pression;
        valeursCourantes.temp = d.temp;
        valeursCourantes.visibilite = d.visibilite;
        valeursCourantes.nuage = d.nuage;
    });
    J'ai pas quand même loupé une étape sur la portée des variables?
    Je suis là-dessus depuis ce matin et je sèche complétement...
    Ce qui est certain, c'est que demain, mon prof ne va pas se contenter de lire son cours, il va m'expliquer.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Comment sais-tu que les valeurs n'ont pas changées? avec un console.log dans la fonction then ou bien à l'extérieur ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut
    Le console.log dans la fonction .then fonctionne parfaitement, c'est quand j'essaie de faire une mise à jour de mon objet valeursCourantes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //table d'association des valeurs
    var valeursCourantes = {
        temp : -42,
        vent : 10,
        visibilite : 5,
        pression : 1013,
        nuage : "gris"
      }

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bah la mise à jour de ton objet est déjà faite dans la fonction then.
    Si tu veux ajouter d'autres instructions qui utilisent l'objet valeurCourantes c'est dans then que tu dois les mettre et pas ailleurs.

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

Discussions similaires

  1. Problème mise à jour variable dans workspace
    Par Xen956 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 24/04/2012, 21h11
  2. Réponses: 0
    Dernier message: 06/04/2010, 12h40
  3. [DOM] Parser un fichier xml avec mise à jour variable
    Par toussef dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 20/01/2010, 11h48
  4. Réponses: 6
    Dernier message: 09/09/2008, 17h36
  5. SSIS : mise à jour variable
    Par kaboume dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/08/2006, 11h25

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