Hola este es el problema a más detalle, tengo una base de datos en MySQL y trato de comunicarme a traves de AS3.
estan declaradas las siguientes variables en forma global
Código :
import flash.events.*;
import flash.net.*;
import flash.utils.*;
var st_error:String;
var st_operacion:String;
var st_existe:String;
var st_nombre:String;
var st_edad:String;
var st_sexo:String;
1) Una pantalla tiene los campos de texto de usuario_txt, grupo_txt, clave_txt
quiero verificar si estos datos existen en la base de datos para permitirle el acceso a traves de una función llamada
function accion_Base_Datos (accion:uint):void. donde el parametro de la acción indica que se va ha hacer, el valor de 0 indica que solo se va a verificar si existe el alumno y permitirle el acceso.
Este es el código de la función:
Código :
function accion_Base_Datos (accion:uint):void
{
// Crear un URLRequest para contener los datos a enviar al archivo PHP
var vrequest:URLRequest = new URLRequest("http://www....../enviar_cargar.php");
// Craer pares nombre-valor para enviar al servidor
var vars_enviar:URLVariables = new URLVariables ();
no_accion_DB = accion;
// Definir los contenidos de las variables a enviar al archivo PHP
switch (no_accion_DB) {
case 0: //Existe alumno
vars_enviar.accion = no_accion_DB; // PHP si lo reconoce como número a $php_accion = $_POST['accion']; -> $php_accion = 2;
vars_enviar.usuario = usuario_txt.text;
vars_enviar.grupo = grupo_txt.text;
vars_enviar.clave = clave_txt.text;
break;
case 1: // Alta de alumno
break;
}
vrequest.method = URLRequestMethod.POST;
vrequest.data = vars_enviar;
// Craer un URLLoader para enviar los datos y recibir una respuesta
var loader:URLLoader = new URLLoader();
// Esperar que el script devuelva variables codificadas emn URL
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
// Esperar el evento COMPLETE para leer la respuesta del servidor
loader.addEventListener(Event.COMPLETE,handleComplete_BD);
// Enviar los datos en el URLRequest fuera del script
loader.load(vrequest);
}
El archivo php regresa la información a traves de echo con los siguientes campos:
error_php
operacion
existe
nombre
edad
sexo
..... etc
La función para el evento COMPLETE es el siguiente:
Código :
function handleComplete_BD(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
st_error = loader.data.error_php;
st_operacion = loader.data.operacion;
st_existe = loader.data.existe;
if (loader.data.existe=="si") {
st_nombre = loader.data.nombre;
st_edad = loader.data.edad;
st_sexo = loader.data.sexo;
}
else {
trace("No existe el alumno");
}
texto_php.appendText(" COMPLETE terminado.");
trace(st_existe,st_nombre ,st_edad); //Aparece si,Juan,43
}
Hay un boton llamado boton_ingresa, en caso que el alumno exista en la base de datos se va a la escena PRESENTACION, el boton responde al siguiente codigo
Código :
function f_presentacion(event:MouseEvent):void
{
accion_Base_Datos(0);
trace(st_existe, st_nombre ,st_edad) //aparece null,null,null
if (st_existe == "si") {
boton_ingresa.removeEventListener(MouseEvent.CLICK, f_presentacion);
gotoAndPlay(1, "presentacion");
}
else {
trace("El alumno no existe")';
}
}
boton_ingresa.addEventListener(MouseEvent.CLICK, f_avanza_presentacion);
Lo que creo que esta ocurriendo es que el archivo swf responde antes o más rápido que la function handleComplete_BD, y por eso el resultado de null,null,null en la function f_presentacion y en la instruccion de trace(st_existe,st_nombre ,st_edad); //Aparece si,Juan,43.
en la function handleComplete_BD(event:Event):void
No se como hacer que termine primero la function handleComplete_BD,
trate de poner una variable switch_BD inicializada en false antes de llamar a accion_Base_Datos(0);
y al final de function handleComplete_BD la variable switch_BD la colocaba en true, para garantizar que ya termino, pero no funciona.
Gracias por tu ayuda