Foros del Web » Programando para Internet » Jquery »

algo mal al recibir la data en un envio de form por $.ajax

Estas en el tema de algo mal al recibir la data en un envio de form por $.ajax en el foro de Jquery en Foros del Web. que tal forer@s como les va tengo el siguiente form: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < form id = "login" name = "login" method ...
  #1 (permalink)  
Antiguo 30/11/2012, 15:12
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
algo mal al recibir la data en un envio de form por $.ajax

que tal forer@s como les va

tengo el siguiente form:

Código HTML:
Ver original
  1. <form id="login" name="login" method="post">
  2.      <em>Nombre de usuario:</em> <input type="text" name="usuario" id="usuario" maxlength="5" size="5" />
  3.      <em>Password:</em> <input type="password" name="password" id="password" size="10" />
  4.      <input type="submit" value="Entrar" />
  5. </form>
  6. <div id="response"></div>

y es mi codigo jquery:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#login").submit(function(){
  3.         if($("#usuario").val() == ""){
  4.             alert("Debe ingresar su nombre de usuario");
  5.         } else{
  6.             if($("#password").val() == ""){
  7.                 alert("Debe ingresar su contraseña");
  8.             } else{
  9.                 var formulario = $('#login').serialize();      
  10.                 $.ajax({
  11.                     url: 'login/acceso_process.php',
  12.                     data: formulario,
  13.                     type: 'POST',
  14.                     dataType: 'json',
  15.                     success: function(result){
  16.                         if (result.success){
  17.                             alert("ok");
  18.                         } else{
  19.                             alert("error");
  20.                             $('#response').text(result.error).fadeIn('slow'); // Mesaje de error en validacion
  21.                         }
  22.                     }
  23.                 });
  24.             }
  25.         }
  26.     });
  27. });

y el php:

Código PHP:
Ver original
  1. include('conexion.php');
  2. require_once("JSON.php");
  3.  
  4. $json = new Services_JSON;
  5.  
  6. $usuario = $_POST['usuario'];
  7. $contrasena = md5($_POST['password']);
  8.  
  9. //hago la consulta a la bd y valido datos
  10.  
  11. if($BD_usuario==""){
  12.         $mensaje = "El usuario no existe en el sistema";
  13.     }
  14.     else{
  15.         if ($contrasena!=$BD_contrasena){
  16.             $mensaje = "La contrase&ntilde;a es incorrecta";
  17.         }
  18.         else{
  19.             $result = "ok";
  20.        }
  21.  
  22.         if($result=="ok"){
  23.         echo $json->encode(array('success'=>true));
  24.     } else{
  25.         echo $json->encode(array('error'=>$mensaje));
  26.     }

Bueno lo que sucede es que si meto los datos correctos si funciona el codigo, es decir si me muestra el alert("ok") pero cuando a proposito meto mal ya sea el nombre de usuario o la contraseña, simplemente no pasa nada, como que la pagina se ve que recarga muy rapido pero no me muestra nada

ya llevo rato con esto y no veo el error, si alguien puediera echarle un ojo se los agradeceria mucho
  #2 (permalink)  
Antiguo 01/12/2012, 09:21
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

Hola prueba esto:

Código PHP:
Ver original
  1. $mensaje = '';
  2. $result = '';
  3. if($BD_usuario==""){
  4.     $mensaje = "El usuario no existe en el sistema";
  5. }else{
  6.     if ($contrasena!=$BD_contrasena){
  7.         $mensaje = "La contrase&ntilde;a es incorrecta";
  8.     }else{
  9.         $result = "ok";
  10.     }
  11. }
  12. if($result=="ok"){
  13.     echo $json->encode(array('success'=>true));
  14. }else{
  15.     echo $json->encode(array('error'=>$mensaje));
  16. }
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 03/12/2012, 09:23
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

hola jonni09lo

ya agregue las declaraciones como me comentas y sigue igual :C
  #4 (permalink)  
Antiguo 03/12/2012, 09:28
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

Pero si separaste las dos secciones de los condicionales???

Porque esto

Código PHP:
Ver original
  1. if($BD_usuario==""){
  2.     $mensaje = "El usuario no existe en el sistema";
  3. }else{
  4.     if ($contrasena!=$BD_contrasena){
  5.         $mensaje = "La contrase&ntilde;a es incorrecta";
  6.     }else{
  7.         $result = "ok";
  8.     }
  9. }

Va separado de esto:

Código PHP:
Ver original
  1. if($result=="ok"){
  2.     echo $json->encode(array('success'=>true));
  3. }else{
  4.     echo $json->encode(array('error'=>$mensaje));
  5. }

y en tu codigo la segunda parte esta dentro del else

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 03/12/2012, 10:42
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

sii estan separados

Código PHP:
Ver original
  1. $json = new Services_JSON;
  2.     //verifico en la base de datos si existe el usuario y si coincide la contraseña
  3.     $usuario= $_POST['usuario'];
  4.     $contrasena = md5($_POST['password']);
  5.  
  6.     $rs= mysql_query("SELECT * FROM usuarios WHERE usuario='$usuario'") or die('Error en la consulta'.mysql_error());
  7.     $row = mysql_fetch_array($rs, MYSQL_ASSOC);
  8.                
  9.     $BD_id_usuario=$row['id_usuario'];
  10.     $BD_usuario=$row['usuario'];
  11.     $BD_nombre=$row['nombre'];
  12.     $BD_contrasena=$row['password'];
  13.    
  14.     $mensaje ="";
  15.     $result = "";
  16.                
  17.     if($BD_usuario==""){
  18.         $mensaje = "El usuario no existe en el sistema";
  19.     }
  20.     else{
  21.         if ($contrasena!=$BD_contrasena){
  22.             $mensaje = "La contrase&ntilde;a es incorrecta";
  23.         }
  24.         else{
  25.             $result = "ok";
  26.             //registro sesiones
  27.             }
  28.     }
  29.     mysql_free_result($rs);
  30.    
  31.     if($result=="ok"){
  32.         echo $json->encode(array('success'=>true));
  33.     } else{
  34.         echo $json->encode(array('error'=>$mensaje));
  35.     }

incluso ya lo hice de la manera tradicional, osea solo con php y si me imprime bien los arreglos json, el problema esta en el jquery no se por que no los recibe bien
  #6 (permalink)  
Antiguo 03/12/2012, 11:01
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

Ya "funciona" pero me da desconfianza por que como que no agarra a la primera en algunos casos, pruebo de 3 formas:

datos correctos, recibo el alert -> true
nombre usuario correcto, contraseña incorrecta, recibo alert -> la contraseña es incorrecta
datos incorrectos, recibo el alert -> el usuario no existe en el sistema

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#login").submit(function(){
  3.         if($("#usuario").val() == ""){
  4.             alert("Debe ingresar su nombre de usuario");
  5.         } else{
  6.             if($("#password").val() == ""){
  7.                 alert("Debe ingresar su contraseña");
  8.             } else{
  9.                 var formulario = $('#login').serialize();      
  10.                 $.ajax({
  11.                     type: 'POST',
  12.                     url: 'acceso_process.php',
  13.                     data: formulario,
  14.                     dataType: 'json',
  15.                     success: function(result){
  16.                         //alert(result);
  17.                         if (result.success){
  18.                             alert(result.success);
  19.                             $('#response').text(result.success).fadeIn('slow'); //esto no lo hace
  20.                         } else{
  21.                             alert(result.error);
  22.                             $('#response').text(result.error).fadeIn('slow'); //esto no lo hace
  23.                         }
  24.                     }
  25.                 });
  26.             }
  27.         }
  28.     });
  29. });

esto esta "bien" (salvo detalles) en ie9

si tengo :

alert(result.error);
$('#response').text(result.error).fadeIn('slow'); //esto no lo hace

si cambio

$('#response').text(result.error).fadeIn('slow'); //esto si lo hace
alert(result.error);

y peor si nada mas dejo:

$('#response').text(result.error).fadeIn('slow'); //pareciera que no hace nada, solo como que recarga la pagina

Editooooo esto si lo hace pero no se aprecia porque lo quita muy rapido, porque recarga la pagina $('#response').text(result.error).fadeIn('slow');

en chrome no funciona nada de ninguna forma :C

Última edición por catpaw; 03/12/2012 a las 11:20
  #7 (permalink)  
Antiguo 03/12/2012, 11:29
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

Mira, una pregunta antes de sacar conclusiones, ¿Cual es la razon para usar $json->encode(array('success'=>true));?
Php desde la version 5.2 creo, tiene un soporte nativo para trabajar con datos json

json_encode y json_decode

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #8 (permalink)  
Antiguo 03/12/2012, 11:48
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

Bueno creo que eso no tiene nada que ver, pero bueno, la razón es que en el servidor que se alojara la pagina trabaja con una versión anterior de php 5.2

No creo que los arreglos sean el problema pues ya funciona el codigo jquery, mi problema es que la pagina se recarga muy rapido (ie9) no se porque y no permite ver el mensaje de error que despliego aquí $('#response').text(result.error).fadeIn('slow');

y otra es que en google chrome no hace nada

y le busco y le busco y no le veo error a esto:

Código Javascript:
Ver original
  1. var formulario = $('#login').serialize();      
  2. $.ajax({
  3.     type: "POST",
  4.     url: "acceso_process.php",
  5.     data: formulario,
  6.     dataType: "json",
  7.     async: false,
  8.     success: function(result){
  9.         //alert(result);
  10.         if (result.success){
  11.             window.location="consulta.php";
  12.         } else{
  13.             $("#response").text(result.error).fadeIn("slow");
  14.         }
  15.     },
  16.     error: function(result){
  17.         alert("FAILED : " + result.status + ' ' + result.statusText);
  18.     }
  19. });

incluso le agregue async: false, porque leí que chrome tiene problemas con peticiones asincronas y un no funciona, tambien agregue el estado de error pero no entra en ese estado ya no se que mas hacer
  #9 (permalink)  
Antiguo 03/12/2012, 11:55
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

ahhhhh ya mira entonces si esto te sirve:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#login").submit(function(e){
  3.         e.preventDefault();
  4.         if($("#usuario").val() == ""){
  5.             alert("Debe ingresar su nombre de usuario");
  6.         } else{
  7.             if($("#password").val() == ""){
  8.                 alert("Debe ingresar su contraseña");
  9.             } else{
  10.                 var formulario = $('#login').serialize();      
  11.                 $.ajax({
  12.                     type: 'POST',
  13.                     url: 'acceso_process.php',
  14.                     data: formulario,
  15.                     dataType: 'json',
  16.                    success: function(result){
  17.                            //alert(result);
  18.                            if (result.success){
  19.                                  window.location="consulta.php";
  20.                           } else{
  21.                                 $("#response").text(result.error).fadeIn("slow");
  22.                           }
  23.                    },
  24.                 });
  25.             }
  26.         }
  27.     });
  28. });
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #10 (permalink)  
Antiguo 03/12/2012, 11:59
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

lo pruebo y te comento gracias

-------------------- :O

ya probé, y ya función en ambos O.O muchas gracias

ahora por favor podrías explicarme que rayos hace e.preventDefault(); que parece que hizo magia :P
  #11 (permalink)  
Antiguo 03/12/2012, 12:18
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

Mira asi, revise y este codigo me funciona en todos los navegadores

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#login").submit(function(){
  3.         if($("#usuario").val() == ""){
  4.             alert("Debe ingresar su nombre de usuario");
  5.         } else{
  6.             if($("#password").val() == ""){
  7.                 alert("Debe ingresar su contraseña");
  8.             } else{
  9.                 var formulario = $('#login').serialize();      
  10.                 $.ajax({
  11.                     type: 'POST',
  12.                     url: 'acceso_process.php',
  13.                     data: formulario,
  14.                     dataType: 'json',
  15.                     success: function(result){
  16.                            //alert(result);
  17.                            if (result.success){
  18.                                  window.location="consulta.php";
  19.                           } else{
  20.                                 $("#response").text(result.error).fadeIn("slow");
  21.                           }
  22.                    }
  23.                 });
  24.             }
  25.         }
  26.         return false;
  27.     });
  28. });
Cambie el preventDefault por return false y quite una coma al finalizar las llaves de success, ya que en ie generaba un error

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #12 (permalink)  
Antiguo 03/12/2012, 12:24
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: algo mal al recibir la data en un envio de form por $.ajax

O.o habia jurado que habia visto un mensaje tuyo que decia que no funcionaba con preventDefault... creo que empece a alucinar xD

En fin, preventDefault, stopPropagation y return false, son distintas maneras de evitar que un elemento html siga realizando lo que normalmente hace, por ejemplo en este caso, con preventDefault se evita que se haga un submit y asi de esta manera no se recargue la pagina ya que el form se submito, las tres tienen funciones distintas y es recomendable usarlas con moderacion y con cuidado

Mira este articulo, me ayudo bastante entender la diferencia entre estas funciones info
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.

Etiquetas: ajax, data, formulario, funcion, input, js, php, recibir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:09.