Comunidad de diseño web y desarrollo en internet online

duda sobre xml

Citar            
MensajeEscrito el 03 Nov 2009 12:46 pm
buenas a tod@s. estoy haciendo un trivial con flash y actionscript 2.0 en el que las preguntas se cargan de un xml. me funciona bien, entre comillas, ya que si intento pasar un valor a una variable al cargar el xml y traceo esta variable me sale undefined y no entiendo porqué. ejemplo:

var pregunta:Number;
var obj_xml:XML=new XML();
obj_xml.ignoreWhite=true;
obj_xml.onLoad=function(exito:Boolean){
if(exito){
preguntar();
}
else{
trace("no");
};
};
function preguntar(){
pregunta=2;
};
obj_xml.load("a.xml");
trace(pregunta);

al tracear la variable pregunta me sale undefined en vez de 2, y no entiendo porqué, si alguien conoce la respuesta le agradecería que me sacara de dudas.
gracias de antemano a todos.

Por gurdi1

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Nov 2009 02:31 pm
El problema que tienes es que dentro del onload pierdes el path. Hace tiempo que no programo en as2, pero si no recuerdo mal, se arregla de la siguiente manera:

Código ActionScript :

obj_xml.parent = this; //o _parent

Y dentro de la funcion onLoad

Código ActionScript :

this.parent.preguntar();

Por ur!

256 de clabLevel



 

Barcelona

chrome
Citar            
MensajeEscrito el 03 Nov 2009 03:24 pm
El valor de la variable "pregunta" solo se asigna después de cargar los datos del XML, es decir:
Cuando mandas a ejecutar la instrucción "load" del XML, esta no se ejecuta inmediatamente, sino que se encola para su ejecución, haz de cuenta que mandas a una persona a cargar los datos, y no sabes cuando tendrá cargados los datos, solo los tendrá cargados cuando la función "onLoad" se ejecute.
Yo pondría el trace dentro de la función "preguntar" que es llamada por la función "onLoad".

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

firefox
Citar            
MensajeEscrito el 03 Nov 2009 03:24 pm
gracias por tu respuesta ur!, intenté lo que me recomendaste de varias maneras pero sigue sin funcionarme. seguiré intentandolo a ver si lo logro.

Por gurdi1

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Nov 2009 03:38 pm
si pongo el trace dentro no me sale nada en el panel de salida, de todas formas lo que yo necesito es dar el valor que tengo dentro del xml a una variable del actionscript para poder usarla después. También necesito saber como cambiar el valor de una variable desde el onLoad y que la variable me guarde el valor, ya que cuando lo intento siempre me sale undefined en el panel de salida, o no me sale nada.
gracias por vuestras respuestas.

Por gurdi1

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Nov 2009 03:51 pm
1) declara la variable "pregunta "como global:

var _global.pregunta:Number;

2) Dentro de la función onLoad asigna tu variable:

_global.pregunta = this.firstChild.firstChild;

3) solo puedes usar el valor de tu variable después de asignarla.

Si no te sale, coloca tu codigo y el contenido de tu XML para ver tus errores.

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

firefox
Citar            
MensajeEscrito el 03 Nov 2009 04:09 pm
el codigo actionscript seria este:

Código ActionScript :

var pregunta:Number;

var obj_xml:XML=new XML();
obj_xml.ignoreWhite=true;
obj_xml.onLoad=function(exito:Boolean){
   if(exito){
      preguntar();
   }
   else{
      trace("no");
   };
};

function preguntar(){
   pregunta=obj_xml.firstChild.childNodes[0].firstChild.nodeValue;
};

obj_xml.load("a.xml");

trace(pregunta);


y el xml este:

Código XML :

<?xml version="1.0" encoding="utf-8"?>

<doc>
<pregunta>2</pregunta>
</doc>


lo que quiero es pasar el valor de la etiqueta pregunta del xml a la variable pregunta del actionscript y que esta me conserve el valor para poder usarla después.

Por gurdi1

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Nov 2009 04:17 pm
corregido:

Código :

var _global.pregunta:Number; 
var obj_xml:XML=new XML(); 
obj_xml.ignoreWhite=true; 
obj_xml.onLoad=function(exito:Boolean){ 
   if(exito){ 
      _global.pregunta=this.firstChild.firstChild.nodeValue; 
      preguntar(); 
   } 
   else{ 
      trace("no"); 
   }; 
}; 
 
function preguntar(){ 
   trace(_global.pregunta);
}; 
 
obj_xml.load("a.xml"); 


haber pruebalo... y nos cuentas.
No pongas el trace fuera de las funciones, no te va a funcionar.

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

firefox
Citar            
MensajeEscrito el 03 Nov 2009 04:24 pm
lo he intentado pero sigue igual.
el trace lo pongo fuera para ver si me cambia la variable, que es lo que necesito.
gracias por tus respuestas.

Por gurdi1

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Nov 2009 04:51 pm
que no pongas el trace fuera, :twisted:
Asi nunca te va a funcionar si no me haces caso

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

firefox
Citar            
MensajeEscrito el 03 Nov 2009 04:58 pm
gabynufe el trace es lo de menos ya que solo lo uso para controlar si me cambia o no la variable, lo que me importa es el valor de esta. de todas formas ya puse el trace dentro y en el panel de salida no me sale nada. lo que busco es coger el valor del xml y que me lo conserve la variable una vez salga del onLoad.
de todas formas muchas gracias por tu interes y respuestas.

Por gurdi1

8 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Nov 2009 05:14 pm
Prueba así:

Código ActionScript :

var pregunta:Number; 
 
var obj_xml:XML=new XML(); 
obj_xml.ignoreWhite=true; 
obj_xml.onLoad=function(exito:Boolean){ 
   if(exito){ 
      preguntar(); 
   } 
   else{ 
      trace("no"); 
   }; 
}; 
 
function preguntar(){ 
   pregunta=obj_xml.firstChild.childNodes[0].firstChild.nodeValue; 
   trace(pregunta);
}; 
 
obj_xml.load("a.xml"); 

Por ur!

256 de clabLevel



 

Barcelona

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.