Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/09/2015, 17:27
Avatar de NueveReinas
NueveReinas
 
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Exclamación Problema con formulario

Hola gente

Necesito modificar unos datos en la BBDD, pero tengo un problema con el formulario que cumple esa función.

La cuestión es que cuando envío los datos por AJAX (jQuery), cuando uno de los campos está vacío, al hacer click en el botón de "submit" simplemente no hace nada. Pero si envío ese mismo formulario con el "action" vacío (para que actúe sobre la misma página) y le pongo el mismo código PHP, sí lo envía, y me muestra el campo correspondiente como vacío.

Ejemplo con código:

index.php

Código PHP:
Ver original
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Prueba form</title>
  6. <script src="jquery-2.1.1.min.js"></script>
  7. </head>
  8.  
  9. <body>
  10.  
  11. <form method="POST" id="form-mod" accept-charset="utf-8" enctype="multipart/form-data">
  12.     <div class="etiqueta-panel">Nuevo código</div>
  13.     <input type="text" name="nuevo_codigo" class="in-panel" id="nuevo_codigo" maxlength="9" autocomplete="off" />
  14.  
  15.     <div class="etiqueta-panel">Nueva descripción</div>
  16.     <input type="text" name="nueva_descripcion" class="in-panel" id="nueva_descripcion" maxlength="50" autocomplete="off" />
  17.  
  18.     <input type="submit" name="submit" class="boton-principal" value="Modificar" />
  19. </form>
  20.  
  21. <hr>
  22.  
  23. <div id="mensaje-mod"></div>
  24.  
  25.  
  26. <script>
  27. $(document).ready(function(){
  28. $("#mensaje-mod").hide();
  29.  
  30. $("#form-mod").on("submit", function(e){
  31.     e.preventDefault();
  32.     var formData = new FormData(document.getElementById("form-mod"));
  33.  
  34.     $.ajax({
  35.         url: "mod.php",
  36.         type: "POST",
  37.         dataType: "HTML",
  38.         data: formData,
  39.         cache: false,
  40.         contentType: false,
  41.         processData: false
  42.     }).done(function(echo){
  43.         if ($("#form-mod input,textarea").val() != "") {
  44.         $("#mensaje-mod").html(echo);
  45.         $("#mensaje-mod").slideDown(500);
  46.         };
  47.     });
  48. });
  49.  
  50. });
  51. </script>
  52.  
  53. </body>
  54. </html>

mod.php

Código PHP:
Ver original
  1. <?php
  2. $codigoNuevo = $_POST['nuevo_codigo'];
  3. $descripcionNueva = $_POST['nueva_descripcion'];
  4. print_r($_POST);
  5. ?>

Entonces, si escribo en el primer campo (nuevo_codigo) A y en segundo (nueva_descripcion) B, recibo esto:



Pero si no escribo nada en primer campo y algo en el segundo, simplemente no devuelve nada:

(nótese el botón siendo apretado)



O sea, no cambia nada. Sin embargo, si veo las peticiones al servidor, sí que envía los datos.



PERO si hago lo siguiente, sí que me muestra los datos vacíos...

Código PHP:
Ver original
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Prueba form</title>
  6. <script src="jquery-2.1.1.min.js"></script>
  7. </head>
  8.  
  9. <body>
  10.  
  11. <form method="POST" action="" id="form-mod" accept-charset="utf-8" enctype="multipart/form-data">
  12.     <div class="etiqueta-panel">Nuevo código</div>
  13.     <input type="text" name="nuevo_codigo" class="in-panel" id="nuevo_codigo" maxlength="9" autocomplete="off" />
  14.  
  15.     <div class="etiqueta-panel">Nueva descripción</div>
  16.     <input type="text" name="nueva_descripcion" class="in-panel" id="nueva_descripcion" maxlength="50" autocomplete="off" />
  17.  
  18.     <input type="submit" name="submit" class="boton-principal" value="Modificar" />
  19. </form>
  20.  
  21. <hr>
  22.  
  23. <?php
  24. if(isset($_POST['submit'])) {
  25. $codigoNuevo = $_POST['nuevo_codigo'];
  26. $descripcionNueva = $_POST['nueva_descripcion'];
  27. print_r($_POST);
  28. };
  29. ?>
  30.  
  31. <div id="mensaje-mod"></div>
  32.  
  33. </body>
  34. </html>



¿Cómo se puede solucionar esto? No se qué problema puede haber, y necesito enviar los datos por AJAX sí o sí...

jrasias d ante braso
__________________
¿Te sirvió la respuesta? Deja un +1