es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo enviar datos de objetos de JQuery a través de AJAX a PHP?

Estoy usando Repeater JS y utiliza la función repeaterVal() para obtener todos los valores de los campos de entrada de un formulario nested repeater y proporciona un objeto como este:

Entonces, he creado una variable var formData = jQuery('.repeater').repeaterVal() y he pasado esa formData a través del AJAX data así:


<?php $dir = plugin_dir_url( FILE ) . "formdata.php"; ?> <script> var form = "<?php echo $dir ?>"; $.ajax({ method: "POST", url: form, data: formData, success: function (data) { console.log("El formulario se ha enviado"); }, error: function (jqXHR, exception) { console.log(jqXHR); } }); </script>

Y luego, en el archivo formdata.php, intenté imprimir esos valores de objeto como esto:

<?php 
$a = $_GET;
if(!$a){
    echo "La matriz está vacía";
}
else{
    print_r(array_keys($a));
}
?>

Y los datos AJAX siempre envían un objeto vacío, no sé por qué o dónde estoy haciendo mal. Pero en un archivo PHP, cuando intento imprimir los datos del objeto, me muestra que es una matriz vacía. Intenté agregar dataType como JSON en el AJAX, pero luego el AJAX siempre devolvía el mensaje de error en lugar de éxito.

Mi objetivo es enviar los datos del formulario en forma de objeto y luego, en el archivo PHP, quiero obtener todos esos datos del objeto e insertarlos en la base de datos MySQL.

Entonces, háganme saber cómo es posible.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunas cosas a considerar al intentar enviar datos desde Repeater JS a través de AJAX y hacia un archivo PHP.

    En primer lugar, asegúrese de estar utilizando el método correcto para su solicitud AJAX. En su fragmento de código, está utilizando el método “POST”, pero en su archivo PHP está tratando de acceder a los datos utilizando la variable $_GET. Cambie el método a “GET” o cambie el código PHP para acceder a los datos utilizando la variable $_POST.

    En segundo lugar, es importante tener en cuenta que los datos devueltos por repeaterVal() son un objeto complejo con múltiples matrices anidadas. Si desea acceder a estos datos correctamente en PHP, deberá usar una función recursiva para recorrer todas las matrices y extraer los valores.

    Aquí hay un ejemplo de una función recursiva que puede usar para extraer los valores de los datos devueltos por repeaterVal():

    function extractData($array) {
      $output = array();
      foreach($array as $key => $value) {
        if (is_array($value)) {
          $output[$key] = extractData($value);
        } else {
          $output[$key] = $value;
        }
      }
      return $output;
    }
    
    $formData = extractData(jQuery('.repeater').repeaterVal());
    

    Esta función recorrerá recursivamente todas las matrices en el objeto y extraerá los valores en una nueva matriz.

    Finalmente, para enviar estos datos a través de AJAX y hacia su archivo PHP, puede codificarlos como JSON usando la función JSON.stringify() y pasarlos como una cadena en el campo de datos de su solicitud AJAX:

    var formData = extractData(jQuery('.repeater').repeaterVal());
    
    $.ajax({
      method: "POST",
      url: "formdata.php",
      data: {'data': JSON.stringify(formData)},
      success: function (data) {
        console.log("Form is submitted");
      },
      error: function (jqXHR, exception) {
        console.log(jqXHR);
      }
    });
    

    En su archivo PHP, puede decodificar esta cadena JSON nuevamente en una matriz PHP utilizando la función json_decode():

    $data = json_decode($_POST['data'], true);
    
    // Ahora puede acceder a los valores de esta manera:
    $first_name = $data['repeater'][0]['first-name'];
    

    Con estos cambios, debería poder enviar correctamente los datos del formulario a través de AJAX y acceder a ellos en su archivo PHP.

Comments are closed.