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

  1. #1
    Membre chevronné
    [FLASH MX2004] [AS2] Attendre la fin de chargement d'un fichier avant de continuer.
    Bonjour,

    Dans le code suivant le constructeur appelle une methode qui contient une fonction(sur l'evenement onLoad) qui ouvre un fichier XML. Cette fonction affiche 1 dans la fenetre lorsquelle est executee.
    Je souhaiterais qu'il attende d'avoir fini de charger le fichier pour continuer.
    Pour que vous voyez l'ordre d'execution, je vous dirai qu'il m'affiche :
    2
    1

    Et biensur ... je voudrais :
    1
    2
    Cela signifie qu'il sort de la fonction getXMLMenu() avant meme d'avoir chargé le fichier, et je veux empecher cela.
    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
    class Page2{
        //declare class attributes
        public var _xmlMenu:String;
        private var _document:XML;
        private var myInterval;
     
        //Constructor that
        function Page2(xmlMenu:String){
            _xmlMenu = xmlMenu;
            getXMLMenu();
            trace("2");
        }
     
     
        private function getXMLMenu():Void{
            _document=new XML(); //we create the XML object
            _document.ignoreWhite=true;// useless spaces are erased
            _document.load(_xmlMenu);//we load the XML file
            _root.stop();
     
            var instance = this;
            //trace("testLoaded: "+_document.loaded);
            // Once the file is loaded ...
            _document.onLoad=function(){
                trace("1");
            }
        }    
    }

    Je me suis pas mal penche sur setInterval sans succes. Je sais l'utiliser, mais je n'arrive pas vraiment a determiner comme elle peut servir mon probleme.

    Merci a vous.
    J'aime les gâteaux.

  2. #2
    Membre chevronné
    Pour le moment je vais essayer de créer une nouvelle fonction "ApresChargementFichierXML" que j'appelle dans le OnLoad. Si quelqu'un a une meilleure idée qu'il n'hesite pas. Car ma bidouille ne sera pas toujours applicable.

    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
    class Page2{
        //declare class attributes
        public var _xmlMenu:String;
        private var _document:XML;
        private var myInterval;
     
        //Constructor that
        function Page2(xmlMenu:String){
            _xmlMenu = xmlMenu;
            getXMLMenu();
        }
     
        private function afterLoadXML(){
             trace("2");
        }
     
     
        private function getXMLMenu():Void{
            _document=new XML(); //we create the XML object
            _document.ignoreWhite=true;// useless spaces are erased
            _document.load(_xmlMenu);//we load the XML file
            _root.stop();
     
            var instance = this;
            //trace("testLoaded: "+_document.loaded);
            // Once the file is loaded ...
            _document.onLoad=function(){
                trace("1");
                instance.afterLoadXML(); //appel de la nouvelle fonction
            }
        }    
    }
    J'aime les gâteaux.

  3. #3
    Membre chevronné
    Decidement de poster ca donne des idées ...

    Voici une solution qui semble bien fonctionner :

    de l'endroit ou vous declarez une instance de classe mettez :
    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
    var menuPage = new Page2(xmlFile);
    myInterval = setInterval(isLoadedXML, 10);
     
    function isLoadedXML(){
        trace("Main.isLoadedXML Drapeau: "+menuPage._Drapeau);
        if (menuPage._Drapeau == true){
            trace("c'est a true");
            clearInterval(myInterval); //on efface l'interval pour arreter de tourner en rond
            afterLoadedXML(); //on appelle la fonction qui se charge du reste du traitement une fois que le fichier est chargé        
        }
    }
     
    function afterLoadedXML(){
        trace("je continue mon traitement ....");
    }


    Et voici ma classe :
    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
    class Page2{
        //declare class attributes
        public var _xmlMenu:String;
        private var _document:XML;
        public var _Drapeau = false;
     
        //Constructor that
        function Page2(xmlMenu:String){
            _xmlMenu = xmlMenu;
            getXMLMenu();
        }
     
        private function getXMLMenu():Void{
            _document=new XML(); //we create the XML object
            _document.ignoreWhite=true;// useless spaces are erased
            _document.load(_xmlMenu);//we load the XML file
            _root.stop();
            trace("0");
            var instance = this;
            // Once the file is loaded ...
            _document.onLoad=function(){
                trace("1");
                instance._Drapeau = true;//j'indique que le fichié est chargé
            }
        }    
    }

    Bon dans cet exemple j'ai mis des attributs de classe en public ... pour faciliter les tests. Il faut adapter.

    Mais je n'en suis pas complement satisfait, donc toute idée est la bienvenue.
    J'aime les gâteaux.

  4. #4
    Expert éminent
    Salut,

    perso, c'est ta solution 2 que j'utilise

    Ps: Peux-tu ajouter le tag de la version que tu utilises dans le titre de ton 1er message ? Merci
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  5. #5
    Membre chevronné
    On peut egalement utiliser ce systeme dans la classe directement.

    Il suffit d'ecrire la fonction isLoadedXML dans la methode getXMLMenu. Et biensur de mettre le setInterval dans getXMLMenu, juste apres avoir appele la methode Load de l'objet LoadVars.

    Cela peut servir dans le constructeur par exemple si l'on veut attendre la fin du chargement d'un fichier dont le contenu sera utilise dans les lignes suivantes.
    J'aime les gâteaux.

  6. #6
    Membre chevronné
    Citation Envoyé par freegreg

    perso, c'est ta solution 2 que j'utilise
    Merci pour ce commentaire ! Ainsi je continue mon developpement l'esprit tranquille.
    J'aime les gâteaux.

  7. #7
    Membre à l'essai
    Bonjour,

    Je cherche à faire un peu la même chose que vous, avec un fichier XML. J'ai plusieurs fichiers à charger, et la solution que vous proposez donne plusieurs fonctions imbriquées : alourdie un peu le code.

    J'ai cherché, mais je n'ai rien trouvé qui permette de :

    - charger le fichier 1
    - attendre la fin du chargement

    - charger le fichier 2
    - attendre la fin du chargement

    - etc ...

    - traiter les données

    Connaissez-vous une autre solution ?

    Merci,

###raw>template_hook.ano_emploi###