Comunidad de diseño web y desarrollo en internet online

HttpService para expertos :S

Citar            
MensajeEscrito el 02 Dic 2009 07:46 pm
Disculpen que el titulo no explique bien el tema pero no sabia como ponrelo ^^.

Bueno el problema es el siguiente, uso el HttpService para acceder a mi base de datos, usando un archivo en php, el problem consiste en lo siguiente:

Tengo un boton que me realiza una simple consulta, la funcion crea el objeto httpService y envia a php, el archivo .php recibe correctamente y me responde enciandome la consulta, recibo los datos sin ningun problema y los imprimo, lo que significa que todo funciona bien ^^, pero he aqui una observacion, cuando le doy un solo click a mi boton que inicia todo el proceso para imprimir en pantalla el resultado, en primera instancia solo me ejecuta los procesos que no implican una respuesta desde la base de datos, y solo cuando le doy un segundo click recien me imprime los componentes que dependen de la respuesta del .php; esto representa un gran problema, pues el usuario final no tendria q darle dos clicks a un boton para que ejecute una sola funcion, a continuacion pongo las funciones que estoy utilizando y espero porfavor me ayuden a resolver este problemita, que estoy seguro se debe a mi falta de conocimiento sobre el funcionamiento del httpService ^^.

Código ActionScript :


public function useHttpService(parameters:Object):void {  
            service = new HTTPService();  
            service.url = "conexion.php";  
            service.method = "POST";  
            service.addEventListener("result", httpResult);  
            service.addEventListener("fault", httpFault);  
            service.useProxy = false;  
            service.send(parameters);
         }

public function httpResult(event:ResultEvent):void {  
            var result:Object = event.result;  
            if(result.users.user is ObjectProxy)  
            {
               usuarios = new ArrayCollection([{titulo:result.users.user.titulo , texto:result.users.user.texto, id:result.users.user.id}]);
            }     
            else
            {  
               usuarios = result.users.user;//
            }  
         }
public function httpFault(event:FaultEvent):void {  
            var faultstring:String = event.fault.faultString;  
            Alert.show("Existe un error al conectar con el servidor " + faultstring);  
         }

public function inicio():void  
         {
/*esta funcion deberia ser el problema, ya que cuando se ejecuta, solo me imprime el primer label creado con la 
funcion Clabel(), y cuando le doy un segundo click recien accede al while ^^ que estan las funciones q crean 
componentes con los datos de la Base de datos.*/
            VboxM1.removeAllChildren();
            Contenedor2.visible = false;
            var obj1 : Object = new Object();
            var c : int =0;
            obj1.opt = c;
            useHttpService(obj1);
            var cont:int=0;
            Clabel("lblInicio1",10,10,450,"LAS ULTIMAS NOVEDADES DE NUESTRO SITIO",VboxM1,ContenedorM1,1,15,14874796,false,true,true);
            while (cont<= usuarios.length)
            {
               Ctext("inicio"+cont.toString(),10,0,450,usuarios.getItemAt(cont).titulo.valueOf().toString() ,VboxM1,ContenedorM1,1,11,2321427,true,false,false);//2321427
               CtextArea("inicio"+cont.toString(),20,0,450,usuarios.getItemAt(cont).texto.valueOf().toString() ,VboxM1,ContenedorM1,1,10,2321427);
               Clabel("limite"+cont.toString(),10,0,460,"___________________________________",VboxM1,ContenedorM1,1,20,14874796,false,false,false);
               cont ++;
            }
         }
// y aki la etiqueta en mxml para crear el boton y designar la funcion
<mx:Button label="Buscar" id="btBuscar"  click="inicio()"/>

Código PHP :

<?php
$mysql = mysql_connect("localhost", "root", "mysql");
mysql_select_db( "mibase" );

switch ($_POST['opt'])
{
   case 0:
   {   $query = "Select * from tabla1 where id>= ((select MAX(id) from tabla1 )-2)";
   }break;
$Result = mysql_query( $query );
      $Return = "<users>";
      while ( $User = mysql_fetch_object( $Result ) )
      {
         $Return .= "<user><id>".$User->id."</id><titulo>".$User->titulo."</titulo><texto>".$User->texto."</texto></user>";
      }
$Return .= "</users>";
mysql_free_result( $Result );
print ($Return);

//aki hay mas casos ^^ pero no lo pongo porq es lo mismo XD y en esta query rescato las 3 ultimas inserciones y la envio, pero creo no creo q el problema este en el php ^^ 


BUENO creo q este es el codigo base, pero quisiera que alguien me ayude, o si le tengo q poner espera antes de que entre al while de la funcion inicio(). Agradezco de antemano que revisen este codigo y me den sugerencias xD

Por isolito

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Dic 2009 09:56 pm
La lógica que depende de la info que cargues desde el servidor la tienes que poner en la función httpResult, no en la función inicio que es la que inicia la llamada y que por lo tanto no dispone de la info necesaria. Yo cambiaría el título a: mecánica básica de un HTTPService ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2009 09:30 pm
graias por la sugerencia ^^ y seria de mucha ayuda, el problema es que desde mi php me envia diferentes respuestas de acuerdo al objeto q envio, asi que por eso decidi no poner nada en el httpResult, sino q solo envio el array y lo proceso en otro lado ^^, por eso lo tengo separado, tengo como 10 funciones similares a inicio(), que varian en funcion a la respuesta, sin embargo me parece q lo mejor seria poner un delay antes de entrar al while, ahora estoy haciendo la prueba y si me resulta os comentare xD gracias por sus sugerencias xD

Por isolito

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Dic 2009 12:54 pm
Si no usas el onResult y agregas un delay, puede que ande, puede que no. Un usuario con buena conexión posiblemtente cuente con los resultados si haces una espera suficientemente grande, sino dará error. Si hay muchos usuariops concurrentes y el server está un poquito ocupado también tendrás error, etc.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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