AJAX - Ajax envía un array vacío

   
Vista:
Imágen de perfil de Jhon

Ajax envía un array vacío

Publicado por Jhon (9 intervenciones) el 14/08/2016 10:16:27
Cordial saludo. Estoy realizando mi primer proyecto real y la verdad nunca había utilizado ajax. Siguiendo tutoriales me hice un login y funcionó perfect así que ahora intenté hacer otro envío de datos de un formulario usando mi login como referencia.
Mi script es así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
$(function(){
 $("#editar").click(function(){
 var url = "<?php echo URI_ROOT . "Disponibilidad/Editar" ?>"; // El script a dónde se realizará la petición.
    $.ajax({
           type: "POST",
           url: url,
           data: $("#formEditarAdicional").serialize(), // Adjuntar los campos del formulario enviado.
           success: function(data)
           {
               $("#respuesta2").html(data); // Mostrar la respuestas del script PHP.
           }
         });
 
    return false; // Evitar ejecutar el submit del formulario.
 });
 
});
</script>
Tengo un formulario así (está incompleto pero es que es largo y todos los inputs son iguales prácticamente::
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<form role="form" id="formEditarAdicional" method="POST" action="">
              <input type="hidden" value="<?=$adicional["pkadicional"] ?>" name="pkadicional" id="pkadicional">
            <div class="form-group">
              <label for="cedula">Cédula del guarda:</label>
              <input type="" class="form-control" id="cedula" name="cedula" value="<?=$adicional["cedulaguarda"] ?>" readonly>
            </div>
            <div class="form-group">
              <label >Puesto:</label>
              <input  class="form-control" list="puestos" id="nompuesto" name="nompuesto" value="<?=$adicional["nombrepuesto"] ?>">
              <datalist id="puestos">
                  <?php
                    foreach ($puestos as $puesto) {
                        echo '<option value="'.$puesto["nombrepuesto"].'">';
                    }
                  ?>
              </datalist>
            </div>
            <div class="form-group">
              <label for="fecha">Fecha:</label>
              <input type="date" class="form-control" id="fecha" name="fecha" value="<?=$adicional["fechaadicional"] ?>">
            </div>
            <div class="form-group">
              <label for="">Turno:</label>
              <input type="" list="turno" class="form-control" name="turno" value="<?=$adicional["turno"] ?>">
              <datalist id="turno">
                  <option value="DIURNO">
                  <option value="NOCTURNO">
              </datalist>
            </div>

He estado intentando sin éxito editar un registro con ese formulario. El error me muestra que el array está lleno de "","","",""; mejor dicho, un array vacío.
SI al controlador le pido que me regrese un vardump de alguna variable recibo lo mismo: string(0)"".

¿Alguien podría ayudarme con esto? Mi controller tomas las variables así:

1
2
3
$pkadicional = addslashes(htmlspecialchars($_POST["pkadicional"]));
        $fecha = addslashes(htmlspecialchars($_POST["fecha"]));
	$turno = addslashes(htmlspecialchars($_POST["turno"]));

Les agradezco cualquier pista sobre el problema. Como digo, mi login es muy similar pero funciona bien. Tenia la duda de si debía postear esto en PHP o en AJAX. AL final lo hice em AJAX porque creo que el problema está ahí.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Ajax envía un array vacío

Publicado por xve (167 intervenciones) el 14/08/2016 16:39:16
Hola Jhon, tal y como lo tienes, parece estar bien el código... revisa la consola del navegador haber que valores envía...

Has revisado que no tengas ningún otro id que se llame igual que el del formulario?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhon

Ajax envía un array vacío

Publicado por Jhon (9 intervenciones) el 14/08/2016 21:31:52
No amigo, no hay ningún ID repetido. He notado que tuve que poner el script en el archivo php de la ventana modal que va como un include de mi controlador. Si lo ponía en la vista no cargaba.
También he notado que después usar el botón deja de funcionar hasta que recargue y lo use de nuevo con otra modal... wait.
Ok, acabo de repensar mi respuesta. En realidad sí se repetía el ID, me explico:
Mi controlador genera dinámicamente una tabla de una base de datos. Cada fila generaba el mismo botón con el miso id y el mismo formulario con el mismo ID,
Mira lo que ocurría al darle al botón:
Captura
Estaba cargando dos veces el jquery. Lo he resuelto dando identificadores tipo:
1
<button type="submit" class="btn btn-primary" id="editarG<?=$adicional["pkadicional"] ?>">
Así el ID y el llamado al ID se generan de forma dinámica (Al formulario le hice lo mismo). En el navegador veo el código fuente y parece que funciona.
El id ahora se llama #editarG6 o #editarG3 porque sólo tengo esas dos filas. Ya no da problemas de tener que recargar y darle a otro botón del mismo ID (Antes de hacerlo dinámico) y el jquery se carga una sola vez.
Pero me sigue dando el error:
1
2
3
4
5
6
7
8
9
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation:
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for
 the right syntax to use near '' at line 1' in C:\Bitnami\wampstack-5.6.23-1\apache2\htdocs\buho\models\DisponibilidadModel.php:48
Stack trace: #0 C:\Bitnami\wampstack-5.6.23-1\apache2\htdocs\buho\models\DisponibilidadModel.php(48): 
PDOStatement->execute() #1 C:\Bitnami\wampstack-5.6.23-1\apache2\htdocs\buho\controllers\DisponibilidadController.php(45):
DisponibilidadModel->editar ('', '', '', '', '', '', '', '', '') #2 C:\Bitnami\wampstack-5.6.23-1\apache2\htdocs\buho\core\FrontController.php(62):
DisponibilidadController->editar() #3 C:\Bitnami\wampstack-5.6.23-1\apache2\htdocs\buho\loader.php(47): FrontController::main() #4 
C:\Bitnami\wampstack-5.6.23-1\apache2\htdocs\buho\index.php(39): require('C:\\Bitnami\\wamp...') #5 {main} thrown in
 C:\Bitnami\wampstack-5.6.23-1\apache2\htdocs\buho\models\DisponibilidadModel.php on line 48
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhon

Ajax envía un array vacío

Publicado por Jhon (9 intervenciones) el 14/08/2016 21:48:44
Por si acaso hice lo mismo al div donde va el resultado y al llamado del div en el succes: AHora se generan con una combinación del id+clave primaria.
Pero si le digo al controlador que mande un var_dump de alguna variable sigue mandando nada de nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhon

Ajax envía un array vacío

Publicado por Jhon (9 intervenciones) el 16/08/2016 07:24:17
He seguido probando y el problema está en los famosos id's y names que se generan dinámicamente. Hice un formulario exactamente igual pero con id y names fijos y funciona.
El problema está ahí pero si quito los Id's dinámicos tengo problemas para cargar un modal y luego otro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhon

Ajax envía un array vacío

Publicado por Jhon (9 intervenciones) el 16/08/2016 09:17:24
No puedo decir exactamente que lo resolví, pero descubrí cosas:
EL problema es en los id's dinámicos. Pero sólo con el form. SI los quito no funciona mi ajax. Pero dando limit 1 a mi busqueda para que la tabla genere una sola fila, y usando un id estático en el form sí que funciona.
Ahora: Los id's dinámicos sí me funcionan perfectamente... EN MICROSOFT EDGE!!!!!!!

¿QUé clase de brujería es esa?????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar