Comunidad de diseño web y desarrollo en internet online

Valor de variable pasada desde php a as3 se pierde.

Citar            
MensajeEscrito el 13 Feb 2012 09:53 pm
Hola a todos, tengo una función con la cual me comunico con php y recibo una variable de una consulta sql que hago ahí, hasta aqui todo bien, el problema es que la variable que recibo solo la puedo usar por dentro de la función que se encarga de comunicarse con el fichero php, no se porque hace esto si la guardo en una variable llamada "record" que esta declarada por fuera de la función y que debería funcionar como una variable global. Al tratar de acceder al valor de la variable "record" por fuera de la función aparece NaN. No se que estoy haciendo mal o si realmente es que no se puede acceder por fuera a un valor traído desde php, inclusive coloque la función antes mencionada a que me retornara el valor que necesito pero tampoco me funciona así. Les agradezco a todos su valiosa ayuda.

Pongo la función para que me puedan ayudar mejor.Si necesitan ver el php (aunque no creo que sea ese fichero porque dentro de la función si obtengo el dato correctamente) me avisan.
También el tipo de dato del cual es la variable es el correcto en as3 asi que por ese lado tampoco esta el problema.

Otra cosa que ya eh intentado es asignarle el valor a "record" dentro de la funcion, pero si accedo a ella por fuera ya no tiene el valor que debería(no tiene ninguno).

Código ActionScript :

var record: Number;
record = connectBD();
recordText.texT.text = record; // ESTE ES UN MOVIECLIP QUE CONTIENE UN CAMPO DE TEXTO DINÁMICO Y ES DONDE QUIERO MOSTRAR EL VALOR DE record

function connectBD ():Number{

   var url:String = "src/w3l1.php?datosusuario=true,nocache="+(Math.random()*9999);
   var enviar:URLRequest = new URLRequest(url);
   var recibir:URLLoader = new URLLoader();
   var local: Number; //El tipo de dato es correcto para recibir la variable desde php
   
   var variables:URLVariables = new URLVariables();
   variables.consultar = "record";

   enviar.method = URLRequestMethod.POST;

   enviar.data = variables;

   recibir.dataFormat = URLLoaderDataFormat.VARIABLES;

   recibir.addEventListener(Event.COMPLETE,Respuesta);
   recibir.addEventListener(IOErrorEvent.IO_ERRORError);

   recibir.load(enviar);

   function Respuesta(event:Event){         
         local = recibir.data.record;
/// record = recibir.data.record;
         //navigateToURL(new URLRequest("javascript:alert('"+local+"')")); Si activo este campo verifico que el dato lo estoy recibiendo correctamente con un mensaje de alerta que me sale en el navegador.
         
   }

   function Error(event:IOErrorEvent):void {
         navigateToURL(new URLRequest("javascript:alert('Error al Conectarse con la Base de Datos. Intentalo mas tarde.')"));
   }
   return local;
}

Por xXHowlXx

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Feb 2012 04:32 am
el problema radica en que la ejecucion sigue mientras que la funcion esta esperando a que ocurra un evento

prueba esto

Código ActionScript :

function Respuesta(event:Event){         
         local = recibir.data.record;
        recordText.texT.text = local; 
   }


y comprobaras que se te cambiara no al instante sino que pasara un cierto tiempo antes de que se cambie

espero que te haya aclarado la duda y te sirva de algo

saludos

Por Yonomimi

76 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Feb 2012 02:05 pm
Muchas gracias Yonomimi por tu ayuda, Ahora estoy pensando en como podria utilizarla por fuera de la funcion una vez que el evento se completa. Alguna idea?

Por xXHowlXx

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Feb 2012 09:27 pm
el problema que tienes es que quieres tener el valor de Record Set antes de tenerlo...es decir...te adelantas...tienes que esperar a que se dispare el evento para que la funcion Repuesta se termine.

Código ActionScript :

connectBD();

function connectBD():Number
{
   var url:String = "src/w3l1.php?datosusuario=true,nocache="+(Math.random()*9999);
   
   var variables:URLVariables = new URLVariables();
   variables.consultar = "record";
   
   var enviar:URLRequest = new URLRequest(url);
   enviar.method = URLRequestMethod.POST;
   enviar.data = variables;
   
   var recibir:URLLoader = new URLLoader();
   recibir.dataFormat = URLLoaderDataFormat.VARIABLES;
   recibir.load(enviar);
   
   recibir.addEventListener(Event.COMPLETE,Respuesta);
   recibir.addEventListener(IOErrorEvent.IO_ERRORError);
}

function Respuesta(event:Event)
{
   recordText.texT = event.data.record;
}

function Error(event:IOErrorEvent):void
{
   navigateToURL(new URLRequest("javascript:alert('Error al Conectarse con la Base de Datos. Intentalo mas tarde.')"));
}


te lo he ordenado un poco...espero que te haya aclarado las dudas y te sirva

saludos

Por Yonomimi

76 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Feb 2012 10:11 pm
Gracias Yonomimi por tu respuesta, eh hecho lo que tu dices, eh agregado el valor de record al campo de texto una vez la función respuesta recibe el evento. Lo que pienso hacer es que, como necesito el valor de la variable "record " por fuera de esta función entonces dentro de esta función pienso llamar al resto del código para ya contar con ese dato en cualquier parte de mi código. Espero tu opinion sobre esto que acabo de pensar aunque no me parece que sea lo mejor. Gracias de verdad por tu valiosa ayuda.

Por xXHowlXx

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 15 Feb 2012 05:55 am
necesitas "record" pues entonces

Código ActionScript :

var record: Number;

connectBD();

function connectBD(): void
{
   var url:String = "src/w3l1.php?datosusuario=true,nocache="+(Math.random()*9999);

   var variables:URLVariables = new URLVariables();
   variables.consultar = "record";

   var enviar:URLRequest = new URLRequest(url);
   enviar.method = URLRequestMethod.POST;
   enviar.data = variables;

   var recibir:URLLoader = new URLLoader();
   recibir.dataFormat = URLLoaderDataFormat.VARIABLES;
   recibir.load(enviar);

   recibir.addEventListener(Event.COMPLETE,Respuesta);
   recibir.addEventListener(IOErrorEvent.IO_ERRORError);

   function Respuesta(event:Event)
   {
      record = event.data.record;
      
      recordText.texT.text = record;
      
      SeguirConLoSiguiente();
   }

   function Error(event:IOErrorEvent):void
   {
      navigateToURL(new URLRequest("javascript:alert('Error al Conectarse con la Base de Datos. Intentalo mas tarde.')"));
   }
}

function SeguirConLoSiguiente ():void
{
   //Aqui sigues con lo siguiente en tu programacion
   //Si necesitas record antes de seguir
}


observar que record no tiene valor hasta que salte el evento de "Event.COMPLETE" y siga el codigo por Respuesta
tambien connectBD(); ya no devuelve ningun valor...lo asignamos en la function "Respuesta"

si tienes alguna duda te sugiero que pogas la clase completa paraque se vea la idea globalmente

saludos

Por Yonomimi

76 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Feb 2012 05:17 pm
Tus respuestas han sido de gran ayuda y vuelvo y te agradezco por ello, exactamente así es como lo hice, en la función respuesta llamo al resto de instrucciones de mi código. Bueno esperemos que si alguien mas le pasa un caso similar este post se lo aclare.

Por xXHowlXx

18 de clabLevel



 

chrome

 

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