TransWikia.com

No envía los datos de la constante definida en js al Php correspondiente

Stack Overflow en español Asked by Ruth on February 15, 2021

Tengo un pequeño formulario para agregar un cliente, lo recibo con JQuery y no tengo idea de como seguir…

$('#agregar').submit(function(e){
      const dataAgregar = {
        nombre: $('#nombre').val(),
        apellido: $('#apellido').val(),
        dni: $('#dni').val()
    }
    console.log(dataAgregar);
    $.post('/autoparts_system/modulos/Clientes/cliente-add.php', {dataAgregar}, 
    function(response){
        console.log(response);
        fetchList();

        // Se resetea el formulario luego de haber enviado los datos
        $('#agregar').trigger('reset');
            
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form role="form" method="post" id="agregar">
   <h3>Ingrese los datos del cliente</h3>
   <p>
   <div class="form-group">
      <label>Escriba su nombre: </label>
      <input type="text" id="nombre" style="text-transform:uppercase;">
      </label>
   </div>
   </p>    
   <p>
   <div class="form-group">
      <label>Escriba su apellido </label>
      <input type="text" id="apellido" style="text-transform:uppercase;">
      </label>
   </div>
   </p>
   <p>
   <div class="form-group">
      <label>Escriba su DNI:</label>
      <input type="text" id="dni" >
      </label>
   </div>
   </p>
   <button type="submit" class="btn btn-danger">Agregar</button>
</form>
<?php

require '../../php/conexion.php';

$nombre   = strtoupper($_POST['nombre']);
$apellido = strtoupper($_POST['apellido']);
$dni      = $_POST['dni'];


echo $nombre, $apellido;
?>

Al mostrar los datos en la Línea console.log(dataAgregar) después de definir la constante, veo en consola todos los datos introducidos al formulario
pero al correr el código en mi localhost el error que me lanza el Php es que no recibe los datos que envía… el console.log(response) que se encuentra dentro del método $.post me devuelve índice indefinido para todas las variables del Php!

2 Answers

te explico a través de un ejemplo como se debe ejecutar

$('#agregar').submit(function(e){
      //usa e.preventDefault() evita la accion del submit
      e.preventDefault()
      const dataAgregar = {
        nombre: $('#nombre').val(),
        apellido: $('#apellido').val(),
        dni: $('#dni').val()
    }
    console.log(dataAgregar);
    $.ajax({
            url: '/autoparts_system/modulos/Clientes/cliente-add.php',
            type: 'post',
          data: dataAgregar,
        beforeSend: function (){
            //opcional
        //antes de enviar puedes colocar un gif cargando o un  mensaje que diga espere...
        }

      }).done(function(data){
            console.log(response);
        fetchList();
        // Se resetea el formulario luego de haber enviado los datos
        $('#agregar').trigger('reset');
      }).fail(function(jqXHR, ajaxOptions, thrownError){
        //en caso de que haya un error muestras un mensaje con el error
        console.log(thrownError);
      })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form role="form" method="post" id="agregar">
   <h3>Ingrese los datos del cliente</h3>
   <p>
   <div class="form-group">
      <label>Escriba su nombre: </label>
      <input type="text" id="nombre" style="text-transform:uppercase;">
      </label>
   </div>
   </p>    
   <p>
   <div class="form-group">
      <label>Escriba su apellido </label>
      <input type="text" id="apellido" style="text-transform:uppercase;">
      </label>
   </div>
   </p>
   <p>
   <div class="form-group">
      <label>Escriba su DNI:</label>
      <input type="text" id="dni" >
      </label>
   </div>
   </p>
   <button type="submit" class="btn btn-danger">Agregar</button>
</form>

Te dejo con comentarios la explicación del código.

Correct answer by Miguel Vargas on February 15, 2021

Si bien la respuesta anterior es correcta, considera mandar todo tu formulario en un objeto FormData Esto mandara todo lo que tengas en tu formulario id="agregar" cabe mencionar que todos tus inputs le deberas agregar el atributo name ya que atraves de ese atributo name podras recibirlo con PHP ejemplo:

<input type="text" id="nombre" name="nombre" style="text-transform:uppercase;">

Entonces tu peticion quedaria de la siguiente manera:

$("#agregar").submit(function (e) {
  //usa e.preventDefault() evita la accion del submit
  e.preventDefault();

  $.ajax({
    url: "URL A DONDE QUIERES MANDAR TU PETICION",
    method: "POST",
    data: new FormData(this), //THIS HACE REFERENCIA AL FORMULARIO #agregar
    cache: "false",
    beforeSend: function () {
      //PUEDES HACER ALGO ANTES DE QUE SE ENVIE TU PETICION
    },
    success: function (data) {
      // EN DATA VIENE LA INFO QUE TE RESPONDE EL SERVIDOR
    },
  });
});

Te dejo unos enlaces para que puedas comprender lo planteado:

FormData()

Answered by NikolaTesla on February 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP