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

ActionScript 3 Discussion :

Probleme chargement XML et Listener


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 53
    Par défaut Probleme chargement XML et Listener
    Bonjour,

    Je suis actuellement en train d'essayer de charger un fichier XML à partir de ActionScript 3.

    J'ai chercher sur beaucoup de forum et je retombe souvent sur la même solution qui est d'utiliser un objet URLLoader et de lui mettre un listener lors de la fin du chargement du fichier XML.

    Le soucis est qu'à l'appel de ma fonction charger() (dans laquelle j'ajoute le listener) il n'attend pas la fin de mon chargement.

    Du coup quand je veux récuperer les donnees XML que j'ai charger dans un tableau ça ne marche pas.

    J'ai fait un affichage de "1" lors du chargement et un affichage de "2" après avoir lancer le chargement de mon XML et l'affichage de 2 de fait avant le 1, donc il ne passe pas en premier dans le chargement;

    Je ne sais pas si je suis clair...

    Je mets le code utile :

    Voici la classe de chargement au sein de laquelle un tableau de donnees est rempli

    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
    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
     
    package  {
     
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
     
    	public class QuizzData extends EventDispatcher
    	{
    		private static const XML_FILE:String = "./xml/quizz.xml";	//url du fichier contenant les quizzs
    		private var donnees : Array;	//tableau contenant les donnees du fichier XML
     
     
    		public function QuizzData()
    		{
    			super();
    			this.donnees = new Array();
    		}
     
    		//fonction executée après le chargement du fichier XML
    		private function onXMLLoaded(evt:Event) : void
    		{
    			var quizzXML : XML = new XML(evt.target.data); 		// creation d'un objet XML dans lequel sera stcoké le contenu du fichier quizz.xml
     
    			quizzXML.ignoreWhitespace = true;
     
    			//recuperation de l'ensemble des quizzs
    			var mesQuizzs : XMLList = quizzXML.elements("quizz");
     
    			for(var q:int = 0; q < mesQuizzs.length(); q++)
    			{
    				var sujet : String = mesQuizzs[q].attribute("sujet");
     
    				var questionsArray:Array = new Array();
     
    				// parcours de l'ensemble des questions du quizz
    				var mesQuestions : XMLList = mesQuizzs[q].elements("question");
    				for(var i:int = 0; i < mesQuestions.length(); i++)
    				{
    					var monNiveau:int = mesQuestions[i].attribute("niveau");	//recuperation du niveau de la question
    					var monEnonce:String = mesQuestions[i].enonce;				//recuperation de l'enonce de la question
     
    					//parcours des differentes solutions pour la question
    					var mesReponses:XMLList = mesQuestions[i].elements("reponse");
     
    					// creation d'un tableau 2D pour contenir la reponse et sa valeur
    					var reponsesArray:Array = new Array(mesReponses.length());	
    					for(var j:int = 0; j < reponsesArray.length; j++)
    					{
    						reponsesArray[j] = new Array(2);
    					}
     
    					//ajout de la reponse et de sa valeur
    					for(var k:int = 0; k < mesReponses.length(); k++)
    					{
    						reponsesArray[k][0] = mesReponses[k];	// ajout du texte de la reponse
    						reponsesArray[k][1] = mesReponses[k].attribute("bonne");	// ajout de la valeur de la reponse
    					}
     
    					//creation du tableau des questions
    					questionsArray.push(new Question(monEnonce, reponsesArray, monNiveau));
    				}
     
    				//ajout du quizz au tableau de données
    				this.donnees.push(new Quizz(sujet, questionsArray));
     
    				trace("1");
    				dispatchEvent(new Event(Event.COMPLETE)); /* UTILE ?*/
    			}
     
    		}
     
    		//chargement du fichier XML
    		public function charger() : void
    		{
    			var chargeur:URLLoader = new URLLoader();	//creation d'un chargeur pour le fichier XML
     
    			chargeur.addEventListener(Event.COMPLETE, onXMLLoaded, false, 0, true);	//ajout d'un listener. La fonction onXMLLoaded est exécutée quand le fichier sera entierement chargé
    			chargeur.load(new URLRequest(XML_FILE));	//chargement du fichier XML
    		}
     
    		// accesseur sur les donnees
    		public function getDonnees() : Array
    		{
    			return this.donnees;
    		}
     
    	}
     
    }
    Voici ma classe Quizz

    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
     
    package  {
     
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.Event;
    //import flash.events.ProgressEvent;
     
    	public class Quizz
    	{
    		private var sujet : String;	// sujet du quizz
    		private var questions : Array;	// tableau contenant les questions du quizz
     
    		// constructeur par defaut
    		public function Quizz(s : String, q : Array) 
    		{ 	
    			this.sujet = s;
    			this.questions = q;
    		}
     
    		// affichage d'un quizz
    		public function affiche() : void
    		{
    			trace("Sujet : " + this.sujet);
     
    			for each(var q:Question in  questions)
    				q.affiche();
    		}
    	}
    }
    Voici le .fla pour tester mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var monQuizzData:QuizzData = new QuizzData();
    monQuizzData.charger();
     
    trace(monQuizzData.getDonnees().length);
     
    trace("2");

    Merci d'avance pour le coup de main

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut
    normal que ton trace2 se fasse avant le trace1, puisque tout se fait de manière asynchrone...
    Pour pouvoir accéder à tes données, il te faut "écouter" l'événement COMPLETE de ton quizzdata, une fois reçu tu pourras exécuter ton getDonnees...

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 53
    Par défaut
    J'ai ajouté ce code au .fla, et ca marche comme il faut.
    C'est bien ca que tu me conseillais bonnafb ?

    Je te remercie pour ton aide précieuse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var monQuizzData:QuizzData = new QuizzData();
    monQuizzData.addEventListener(Event.COMPLETE, onQuizzLoad);
    monQuizzData.charger();
     
    function onQuizzLoad(evt:Event) : void
    {
    	monQuizzData.getDonnees()[0].affiche();
    }

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut

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

Discussions similaires

  1. probleme de chargement XML/XSD
    Par jean1979 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 03/11/2011, 11h46
  2. Probleme de chargement xml local
    Par km3l3on dans le forum C#
    Réponses: 3
    Dernier message: 27/05/2010, 15h53
  3. probleme chargement xml (undefined)
    Par totoz dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 17/08/2009, 10h22
  4. Probleme de chargement XML
    Par wystan dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 04/04/2008, 14h39
  5. [AS2] Probleme chargement XML et portée des variables
    Par barok dans le forum ActionScript 1 & ActionScript 2
    Réponses: 11
    Dernier message: 27/09/2007, 12h29

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