Comunidad de diseño web y desarrollo en internet online

Demorar return de una funcion

Citar            
MensajeEscrito el 17 Mar 2012 06:38 pm
Bueno estoy intentando hacer algo, aunque no se si es la mejor manera la verdad, ya que no me funciona, en fin lo explico:

tengo una funcion que valida entre otras cosas la existenca de un email en la base de datos, esta validacion de email hace justo un ajax, por lo que tiene que esperar la respuesta del servidor para saber que devolvera la funcion en la que se encuentra este ajax, pero esta funcion no se espera a que el ajax este completado y hace el return antes de saber si la validacion es 'ok' o 'ko'. Dejo una pequeña ilistracion:

Código :

function checkeaErrores(objeto){
  var hasError=false;
   switch(objeto.attr('name')){
           case 'email':
             if(valEmail(objeto.val())){
               $.post("validaAjax.php", {email: objeto.val()},function(data){
                  if(data=='ok'){
                    objeto.css('background-color','#FFFFFF');
                  }else if(data=='ko'){
                    hasError=true;
                                                  objeto.css('background-color','#FFEDEF');
                  }
                  
               });  
            }else{
               hasError=true; objeto.css('background-color','#FFEDEF');
            }
           break;

           case 'pass':
             if(!valPass(objeto.val())){
               hasError=true; objeto.css('background-color','#FFEDEF');
            }else{
                objeto.css('background-color','#FFFFFF');
            }
           break;
           case 'pass2':
             if($('#pass').val()!=objeto.val()){
               hasError=true; objeto.css('background-color','#FFEDEF');
            }else{
                objeto.css('background-color','#FFFFFF');
            }
           break;
           
        }
          return hasError;

}
//EN OTRO PUNETO DEL CODIGO
error=checkeaErrores($(this));
//


Aunque el email ya existe en la base de datos el return del la funcion es false i.e (lo que le doy por defecto). mi problema biene en que se ejecuta antes el return de la funcion sin esperar a que el ajax del email este completo para cambiar el hasError a true..
Alguna pista..
Thanks..

Por franmadj

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Mar 2012 09:46 pm
una pequeña pista, si usas jQuery puedes utilizar el método .ajaxSuccess() para realizar alguna acción después de que el contenido asíncrono es cargado.

Por HtrMancera

Claber

342 de clabLevel

1 tutorial

Genero:Masculino  

Front-end Developer

chrome
Citar            
MensajeEscrito el 19 Mar 2012 06:12 pm
mmmm :? Gracias por la respuesta, pero eso no me sirve, ya que la funcion que tiene el ajax ya se ejecuta cuando el ajax se completa y para entonces la funcion contenedora de este ajax ya ha dado una respuesta, nunca me habia encontrado con algo asi, lo tendre que plantear de otra manera creo...

Por franmadj

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Mar 2012 06:51 pm
Bueno ya lo he averiguado. simplemente tenia que hacer una peticion sicrona en vez de asicrona.
con jQuery :

Código :

 $.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   async: false,
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
 });

Con javaScript:

Código :

XMLHttpRequestObject.open (method, url, false);


That´s it :o

Por franmadj

3 de clabLevel



 

firefox

 

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