Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496

    Problema Array in una funzione per XML

    Ciao!
    Ho letto la guida di html.it sulla gestione degli xml in flash e sto facendo delle prove.
    Il codice proposto è questo:
    Codice PHP:
    filexml "annuario.xml";
    var 
    tipo=new String;
    tipo="a";
    ApriXML();

    function 
    ApriXML ()
    {
        
    mioxml = new XML();
        
    myarray = new Array();
        
    myarray2 = new Array();
        
    myarray3 = new Array();
        
    nomeclasse = new Array();
        
    cognomealunno = new Array();
        
    nomealunno = new Array();

        
    mioxml.load(filexml);
        
    mioxml.onLoad ElaboraXML;
        
        function 
    ElaboraXML (success)
        {
            if (
    mioxml.loaded)
            {
                
    myarray mioxml.childNodes;
                for (
    j=0;j<=myarray.length;j++)
                {
                     if (
    myarray[j].nodeName == "Annuario")
                    {
                        
    myarray2 myarray[j].childNodes;
                          for (
    i=0;i<=myarray2.length;i++)
                        {
                             if (
    myarray2[i].nodeName == "Classe")
                            {
                                   
    root.nomeclasse.push(myarray2[i].attributes.nome);
                                
    myarray3 myarray2[i].childNodes;
                                      for (
    k=0;k<=myarray3.length;k++)
                                    {
                                         if (
    myarray3[k].nodeName == "Alunno")
                                        { 
    _root.cognomealunno.push(myarray3[k].attributes.cognome);
                        
    _root.nomealunno.push(myarray3[k].attributes.nome);
                                        }
                                        
    //if (myarray3[k].nodeName == "arrivo")
                                        //{
                                        //    _root.harrivo.push(myarray3[k].attributes.h);
                                        //}
                                
    }
                               }
                        }
                       }
                }
        };
         
    delete myarray;
         
    delete myarray2;
     
    delete myarray2;
         
    delete mioxml;
    };
    };

    stop(); 
    Il problema si presenta quando vado a leggere gli array cognomealunno e nomealunno, perchè se FUORI DALLA FUNZIONE (prima dello stop per intenderci) scrivo il
    codice:
     trace(nomealunno[0]);
    in debug mi dà undefined, ma se lo scrivo subito dopo il push nell'array me lo scrive.

    Credo sia un problema dovuto alla dichiarazione dell'array, che dovrebbe essere impostato come pubblico, ma se lo faccio mi dà altri errori.

    Avete un'idea di come risolverlo?

  2. #2
    >in debug mi dà undefined, ma se lo scrivo subito dopo il push nell'array me lo scrive.

    ovviamente se lo metti prima del push l'elemento nell'array ancora nn cè ee quindi ti da undefined
    quindi puoi richiamare l'array solo dopo averlo popolato


    ps
    ti consiglio di passare alla lezione successiva dove ti fa vedere come fare usando delle funzioni nel success al posto della lettura diretta dell'xml
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  3. #3
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    La funzione di cui prima si trova qui ma nella lezione successiva non si parla del success...
    e comunque, correggimi se sbaglio, ma se faccio

    Codice PHP:
    ApriXML();
    //Definizione di ApriXML()
    //...
    trace(nomealunno[0]);
    stop(); 
    dovrebbe leggermi il contenuto dell'array, avendolo appena popolato tramite ApriXML()! Giusto?

  4. #4
    Originariamente inviato da EngLab
    La funzione di cui prima si trova qui ma nella lezione successiva non si parla del success...
    e comunque, correggimi se sbaglio, ma se faccio

    Codice PHP:
    ApriXML();
    //Definizione di ApriXML()
    //...
    trace(nomealunno[0]);
    stop(); 
    dovrebbe leggermi il contenuto dell'array, avendolo appena popolato tramite ApriXML()! Giusto?
    teoricamente si ma poichè ci sarà un diverso tempo per le due cose
    cioè richiami la funzione e fai il trace
    ma la funzione avrà cmq bisogno di un attimo in + e quindi il trace fallisce dato che viene fatto subito


    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  5. #5
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  6. #6
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    Originariamente inviato da crescenzo
    la funzione avrà cmq bisogno di un attimo in + e quindi il trace fallisce dato che viene fatto subito
    Questa cosa non credevo fosse possibile VVoVe: !!!
    Nei linguaggi di programmazione che ho già studiato e approfondito se un'operazione non viene terminata, la successiva non parte... Ma in Flash, evidentemente, non è così, vero?

    Quindi, se l'array lo uso in qualche altro fotogramma a distanza di qualche millisecondo, dovrebbe funzionare bene?

    Grazie per la risposta!

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    dovresti approfondire la definizione di asincronismo, che è essenzialmente il modo in cui si sviluppa (in questo caso) lo scambio di dati tra flash e l'esterno

    essenzialmente i dati hanno un tempo di caricamento e ci sono delle funzioni (eventi) che vengono richiamate appunto in momenti precisi, letteralmente infatti onLoad significa a caricamento avvenuto
    va da sè che tutta la manipolazione dei dati caricati dall'esterno può essere fatta solo quando siamo perfettamente sicuri che questi dati siano fruibili in flash

  8. #8
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    E quindi usando questa funzione onLoad posso attendere che i dati vengano caricati nell'array?
    Se sì, sai dirmi come?

  9. #9
    Originariamente inviato da EngLab
    E quindi usando questa funzione onLoad posso attendere che i dati vengano caricati nell'array?
    Se sì, sai dirmi come?
    ma tu già usi quella funzione.....

    nomealunno = new Array();

    mioxml.load(filexml);
    mioxml.onLoad = ElaboraXML;

    function ElaboraXML (success)

    quindi le tue manipolazioni li devi fare nell'onload.... (in questo caso nella funzione elaboraxml

    oppure metti in quello le chiamate a altre funzioni ...ma la chiamata la devi fare sempre nell'onload..
    come nel link

    function ElaboraXML (success) {

    if (mioxml.loaded) {
    myarray = mioxml.childNodes;
    Dati();
    MenuPag();
    CreaTabelle();

    delete myarray;
    delete mioxml;
    }
    };
    };

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  10. #10
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    capito, grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.