Comunidad de diseño web y desarrollo en internet online

Ayuda. Que estoy haciendo mal!!

Citar            
MensajeEscrito el 21 Jul 2010 03:29 am
Buenas a todos, estoy intentando recorrer un xml para mostrar en unos controles y no me da error pero tampoco me cargan los datos, que estoy haciendo mal, por favor ayuda. Este es el código:

Código :

//El httpservice
<mx:HTTPService id="htCargaPreguntas" result="HTTPResult(event);" fault="HTTPFault(event);" url="php/CargarPreguntas.php" showBusyCursor="true" />
//importo
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;

//variables
public var lasPreg:XMLListCollection;
private var nPre:Number = 0;
private var TotB:uint;
private var TotM:uint;
private var ResSel:String="";
private var Rpta:String = "";

//funciones
private function HTTPResult(event:ResultEvent):void{
     lasPreg = event.result.Preguntas.Pregunta;
}
//funcion para cagar los datos a los controles
private function CargarPreguntas():void{
         htCargaPreguntas.send({temaF:cbTema.selectedItem.idTema});
         currentState="preguntas";
         pnPreguntas.title = "Pregunta "+(nPre+1)+" de "+lasPreg.elements().length() +" preguntas";
         txtPregunta.text = lasPreg[nPre].texto;
         rbOp1.label = lasPreg[nPre].op1;
         rbOp2.label = lasPreg[nPre].op2;
         rbOp3.label = lasPreg[nPre].op3;
         rbOp4.label = lasPreg[nPre].op4;
         Rpta = lasPreg[nPre].rb;
         //LasPreguntas.source = {htCargaPreguntas.lastResult.Preguntas.Pregunta};
      }

//llamo la funcion desde el evento click del boton
<mx:Button x="159" y="133" label="Entrar" id="btnEntrar" click="CargarPreguntas();"/>

Creo que esta todo, pero igual no me funciona; no me da error pero tampoco carga los datos a los controles.
De antemano muchas gracias por su colaboración.

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2010 01:38 pm
Dado que CargarPreguntas depende de los datos cargados, lo deberías llamar desde la función HTTPResult (cambia el nombre, no pongas nombres que se usan en AS a métodos) y no desde un botón que el usuario puede oprimir antes de que los datos estén disponibles

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2010 02:28 pm
Muchas gracias por tu respuesta mi idea es que los datos se carguen al dar clic en el botón, lo puedo validar para evitar errores pero la idea es antes poder ver los datos cargados. Sera por eso que no se ven los datos??. voy a ver cambiando nombres y la forma de llamarlo

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2010 02:31 pm
A y ademas como puedes ver hago el send del httpservice en la función CargarPreguntas, no se donde mas hacerlo para que funciones, aun que creo que ahí esta bien.

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2010 02:39 pm
Cierto, haz el send en el onComplete del Application, así ya lo tienes, cuando le dan al botón solo se muestran, sino haz el send en CargarPreguntas y mueve todo el resto de código a HTTPResult

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2010 03:08 pm
ya probe y mi error esta en esta linea: lasPreg = event.lastResult.Preguntas.Pregunta; por que le pongo comentario y hago un alert para probar y me lo muestra, si quito el comentario ya no funciona.

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2010 04:29 pm
Ya creo encontré el error, lastima que no se como solucionarlo, pero ya di un paso, necesito saber como tomar el xml que me entrega el httpservice y convertirlo bien a un xmlList para poder recorrerlo, ese es realmente mi problema por eso no sale nada. He hecho mucha spruebas y no me da erro por que no lo hay solo que cuando hago un length (para saber cuantos elementos hay dentro) me dice que cero; es decir no esta trayendo nada y sospecho que es por el tipo de datos, el httpservice me trae xml y lo necesito convertir a xmlList. Lo ultimo que probé fue esto:
//la variable
public var lasPreg:XMLList = new XMLList;
//la funcion para el result
private function HTTPBien():void{
lasPreg = new XML(htCargaPreguntas.lastResult.Preguntas) as XMLList;
Alert.show("todo bien");
}
//funcion para cargar los datos
private function CargarPreguntas():void{
htCargaPreguntas.send({temaF:cbTema.selectedItem.idTema});
currentState="preguntas";
pnPreguntas.title = "Pregunta "+(nPre+1)+" de "+lasPreg.length()+" preguntas";
txtPregunta.text = lasPreg[nPre].Pregunta;
rbOp1.label = lasPreg[nPre].Op1;
rbOp2.label = lasPreg[nPre].Op2;
rbOp3.label = lasPreg[nPre].Op3;
rbOp4.label = lasPreg[nPre].Op4;
Rpta = lasPreg[nPre].OpCorrecta;
}
//y sigo llamando la funcion desde le boton
<mx:Button x="159" y="133" label="Entrar" id="btnEntrar" click="CargarPreguntas();"/>

Ahora un poco mas claro, espero que alguien me de una mano, por favor y muchas gracias de antemano por el tiempo que puedan dedicar a mi problema.

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2010 05:43 pm
El error está allí porque no puede acceder al resultado, o el resultado no tiene ese nodo, fíjate si estas escribiendo bien la ruta al nodo, traza el result a ver si estás recibiendo algo.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2010 06:38 pm
Mmmmm, reviso el nodo como me decis, ejecute el php directamente y claro me da bien, reviso los nodos y están correctos, que otra cosa podrá ser

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2010 06:41 pm
mira de hecho puse un datagrid y le di el dataprovider del htCargaPreguntas.lastResult.Preguntas.Pregunta y me muestra bien los datos, insisto que el erro es en la toma de datos en el xmlList

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2010 06:54 pm
Le cambiaste el nobre a la función a HTTPBien, cambiaste el MXML donde dice result="HTTPResult(event);"

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2010 07:08 pm
Claro ese cambio tambien lo note y lo realice, y de hecho si notas arriba en el mensaje la funcion HTTPBien tiene un alert y efectivamente lo muestra para comprobar que se ejecuta el result correctamente. Gracias por tu tiempo

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Jul 2010 12:25 pm
Ya lo solucione, simplemente llamo la funcion CargarPreguntas en el result y listo me cargan bien, pero el problema ya es que necesito saber la cantidad de registros que me trae el HTTPService, por que para que me funcione estoy utilizando el htCargarPreguntas.lastResult.Preguntas.Pregunta[nPRe].Texto
Es la unica forma en que me funciono tomando el HTTPService tal como me lo trae, si intento pasarlo a un xmlList ya no funciona, y seguro es por que no se convertir lo que me trae a un xmlList. Gracias por su tiempo en mi problema

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Jul 2010 12:32 pm
como te habia dicho antes intento cargar el xmlList de esta forma, y la verdad no se si es lo correcto:
lasPreg = XML(htCargaPreguntas.lastResult.Preguntas).Pregunta as XMLList;

la estructura de mi xml es:
<Preguntas>
<Pregunta>
<idPregunta>1</idPregunta>
<idTema>6</idTema>
<Texto>Texto de una pregunta</Texto>
<Op1>Opcion1</Op1>
<Op2>Opcion2<Op2>
<Op3>Opcion3</Op3>
<Op4>Opcion4</Op4>
<OpCorrecta>Opcion correcta</OpCorrecta>
</Pregunta>
</Preguntas>

Espero me podas ayudar aun mas con esto.

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Jul 2010 01:39 pm
Primero mira si tienes el XML, puede que no lo este parseando:

var miXml:XML = new XML(htCargaPreguntas.lastResult)

Si no lo digiere, es porque no le gusta la estructura del XML

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Jul 2010 01:53 pm

solisarg escribió:

Primero mira si tienes el XML, puede que no lo este parseando:

var miXml:XML = new XML(htCargaPreguntas.lastResult)

Si no lo digiere, es porque no le gusta la estructura del XML

Jorge
Listo esta ahí me queda claro pero luego como imprimo el contenido del miXml, pensé que era algo así:
txtPregunta.text = miXml[nPre].Texto;
Pero no funciona, como accedo al contenido??
Me disculpo por mi ignorancia pero hace poco estoy en esto de flex y la verdad me gusta mucho pero es poco lo que conozco. De antemano muchas gracias por tu tiempo

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Jul 2010 02:04 pm
Ahora el XMLList sería:

miXML.Preguntas

Si no funciona, agrega un nodo anterior con cualquier nombre (datos por ejemplo) y vuelve a probar

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Jul 2010 02:14 pm
Pues con lo de var miXml:XMLList = new XMLList(htCargaPreguntas.lastResult); me va bien y ya tengo el largo del xml, pero sigo con el problema de como accedo a los datos que están en miXml que ya es un xmlList. como es eso de agregar un nodo anterior, sera uno cualquiera o debe estar en mi estructura xml, y si lo que quiero es imprimir el contenido así:
txtPregunta.text = miXml.[nPre].Texto; como no me funciono pense en ponerlo así pero igual no me funciona:
txtPregunta.text = miXml.Preguntas[nPre].Texto;

no veo como acomodar lo que me decís para imprimir el contenido
de nuevo muchas gracias

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Jul 2010 02:31 pm
Te falta cerrar el tag de Op2 y no puede crear el XML. Rápidamente es algo así:

Código ActionScript :

var miXml:XML = new XML(<Preguntas><Pregunta><idPregunta>1</idPregunta><idTema>6</idTema><Texto>Texto de una pregunta</Texto><Op1>Opcion1</Op1><Op2>Opcion2</Op2><Op3>Opcion3</Op3><Op4>Opcion4</Op4><OpCorrecta>Opcion correcta</OpCorrecta></Pregunta></Preguntas>)
var lista:XMLList = miXml.Pregunta
trace(lista[0].Texto)

En tu caso lo cargas externamente, yo lo hice hardcoded

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Jul 2010 02:37 pm
Por fin!!!!!!!!!!!!!!!!!
Mil gracias por tu ayuda, seguro que sin tu colaboración nunca (y estoy seguro de eso) hubiera podido hacerlo.

Por acumulador

28 de clabLevel



 

chrome

 

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