Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] diferentes avisos

Estas en el tema de diferentes avisos en el foro de Jquery en Foros del Web. Hola amigos, Tengo un pequeño problema que no se muy bien como solucionarlo. Tengo un formulario php y ajax que funciona correctamente, el problema viene ...
  #1 (permalink)  
Antiguo 23/01/2016, 13:46
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 3 meses
Puntos: 0
diferentes avisos

Hola amigos,
Tengo un pequeño problema que no se muy bien como solucionarlo.
Tengo un formulario php y ajax que funciona correctamente, el problema viene con los mensajes que quiero mostrar en casos como por ejemplo cuando dejas un input en blanco, se guarda correctamente o se produce algun error.
No se muy bien como hacer para que salte en el html el mensaje que corresponde en cada caso.
En el formulario he creado un <p> con un id diferente para cada input, pues el mensaje que quiero que salga en cada caso ira alli,
Los tiros creo que van poniendo prepend(msg) dentro del success.



formulario html
------------------------------------------------------------------------
Código HTML:
Ver original
  1.     <input type="text" class="nombre"  />
  2.     <p id="mensaje_nombre"></p>
  3.     <input type="text" class="email"  />
  4.     <p id="mensaje_email"></p>
  5.     <button id="guardar">Guardar</button>
  6.     <p id="mensaje_general"></p>
  7. </form>


js
------------------------------------------------------------------------
Código Javascript:
Ver original
  1. $("#registro").click(function() {
  2.    
  3.     var nombre = $(".nombre").val();
  4.     var email = $(".email").val();
  5.  
  6.    
  7.     $.ajax({
  8.         type: "POST",
  9.         url: "ejemplo.php",
  10.         data: {nombre: nombre, email: email},
  11.         success: function(msg){
  12.            
  13.         }
  14.        
  15.     })
  16.    
  17. });

ejemplo.php
------------------------------------------------------------------------
Código PHP:
Ver original
  1. $nombre = $_POST["nombre"];
  2. $email = $_POST["email"];
  3.    
  4. if($nombre == ""){
  5.     echo "rellenar nombre";
  6. }
  7. if($email== ""){
  8.     echo "rellenar email";
  9. }
  10.    
  11. $query = mysql_query("select...");
  12. $numero = mysql_num_rows($query);
  13.    
  14. if ($numero == 0){
  15.     echo "guardado";   
  16. }else { echo "Error";}

Última edición por RicardGTX; 23/01/2016 a las 13:55
  #2 (permalink)  
Antiguo 23/01/2016, 20:05
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: diferentes avisos

Necesitas devolver un objeto con cada mensaje a mostrar, aunque si trabajas con navegadores que soporten HTML5, el tema de las validaciones de campos vacíos podrás hacerlo añadiendo el atributo required a cada campo:
Código HTML:
Ver original
  1. <input type="text" name="nombre" required  />
Por cierto, para poder obtener los valores de los campos en el archivo PHP, en lugar de asignar clases a los campos, deben ser nombres, justo como en el ejemplo anterior.

Para la respuesta final, como la estás imprimiendo en el archivo PHP, solo tienes que tomar al elemento en el cual deseas mostrarla y asignársela como contenido:
Código Javascript:
Ver original
  1. success: function(msg){
  2.     $("#mensaje_general").text(msg);
  3. }
Por cierto, para que la petición asíncrona (AJAX) se ejecute con normalidad, primero necesitas cancelar el envío del formulario. Para ello, puedes retornar el valor booleano false o utilizar el método .preventDefault():
Código Javascript:
Ver original
  1. $("#id del formulario").on("submit", function(event){
  2.     event.preventDefault();
  3.     //El resto de instrucciones
  4. });
Aunque al darle clic al botón de envío se realice el envío de los datos del formulario, es preferible asociar el evento submit, el cual ocurre cuando se incia el procesamiento de un formulario, al formulario.

P. D.: Me parece que la condición para imprimir el mensaje final no es correcta. Si es como lo imagino, debe de imprimirse el mensaje de éxito cuando se encuentren coincidencias en la base de datos y el de error cuando eso no suceda, pero depende de qué estés haciendo.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 24/01/2016, 09:03
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 3 meses
Puntos: 0
Respuesta: diferentes avisos

Gracias por tu respuesta :)
he estado probando y siguiendo tus consejos.
Pero lo que no consigo es hacer que
Código PHP:
Ver original
  1. if($nombre == ""){
  2.     echo "rellenar nombre";
  3. }
  4. if($email== ""){
  5.     echo "rellenar email";
  6. }

aparezca cada mensaje en el div correspondiente del html

Código HTML:
Ver original
  1. <p id="mensaje_nombre"></p>
  2. <p id="mensaje_email"></p>


con el required no haria fala como bien dices, pero me gustaria saberlo por curiosidad y aprender :)

saludos
gracias
  #4 (permalink)  
Antiguo 24/01/2016, 10:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: diferentes avisos

En ese caso, puedes devolver un objeto desde PHP y tendrías que leer las propiedades del objeto en JavaScript:
Código PHP:
Ver original
  1. if ($nombre == ""){
  2.     $name = 'Rellenar nombre';
  3. }
  4. else{
  5.     $name = '';
  6. }
  7.  
  8. if($email== ""){
  9.     $mail = 'Rellenar email';
  10. }
  11. else{
  12.     $mail = '';
  13. }
  14.  
  15. if ($numero == 0){
  16.     $resp = 'Guardado';
  17. }
  18. else{
  19.     $resp = 'Error';
  20. }
  21.  
  22.     'nombre' => $name,
  23.     'correo' => $mail,
  24.     'respuesta' => $resp
  25. ]);
Código Javascript:
Ver original
  1. $.ajax({
  2.     type: "POST",
  3.     url: "ejemplo.php",
  4.     data: {nombre: nombre, email: email},
  5.     dataType: "json",
  6.     success: function(msg){
  7.         $("#mensaje_nombre").text(msg.nombre);
  8.         $("#mensaje_email").text(msg.correo);
  9.         $("#mensaje_general").text(msg.respuesta);
  10.     }
  11. });

Como no se puede devolver un array directamente, hay que parsearlo a JSON. Asimismo, en el método $.ajax(), hay que asignar el valor "json" al atributo dataType para que la respuesta sea tratada como un objeto JSON.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 24/01/2016 a las 12:54 Razón: Sintaxis
  #5 (permalink)  
Antiguo 24/01/2016, 12:24
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 3 meses
Puntos: 0
Respuesta: diferentes avisos

gracias :)
Funciona perfectamente.

un saludo

Etiquetas: ajax, avisos, formulario, funcion, html, input, javascript, js, php
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 10:26.