Манипулирование массивом, отправленным ajax в файл php, в функции другого файла - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть массив, определенный в JS, и я отправляю его с помощью AJAX в файл PHP с именем aux.php.Что мне нужно, так это то, что этот массив можно увидеть и манипулировать в функции внутри класса другого php-файла с именем payment.php.

Я передал им весь код, чтобы они могли понять, что я делаю:

HTML с формой:

<form method="post" onsubmit="return validateForm()" id="formCash">

    <input type="text" class="form-control" id="registroUsuario" name="registroUsuario" placeholder="Nombre Completo" maxlength="26" required>

    <input type="text" class="form-control" id="registroDireccion" name="registroDireccion" placeholder="Dirección de envío con altura de calle" required>

    <input type="text" class="form-control" id="registroCalendario" name="registroCalendario" placeholder="Día de envío" required>

    <input type="email" class="form-control" id="registroEmail" name="registroEmail" placeholder="Correo Electrónico" maxlength="32" required>

    <input type="text" class="form-control" id="registroTelefono" name="registroTelefono" placeholder="Teléfono de contacto" maxlength="16" onkeypress="return isNumber(event)" required>       

      <?php

      $payments = new Payments();
      $payments -> ctrCash();

      ?>

    <input type="submit" class="btn btn-block btn-lg btn-default backColor btnPagar" id="btnPagar" value="CONFIRMAR PEDIDO">

</form>

Функция в Javascript, которая содержит массив и отправляет его с помощью AJAX в aux.php:

$("#btnPagar").click(function(){ 

    var total = $(".valorTotalCompra").html();

    var envio = $(".valorTotalEnvio").html();

    var subtotal = $(".valorSubtotal").html();

    var titulo = $(".valorTitulo");

    var cantidad = $(".valorCantidad");

    var valorItem = $(".valorItem");

    var idProducto = $('.cuerpoCarrito button, .comprarAhora button');

    var tituloArray = [];
    var cantidadArray = [];
    var valorItemArray = [];
    var idProductoArray = [];

    for(var i = 0; i < (titulo.length/2); i++){

        tituloArray[i] = $(titulo[i]).html();
        cantidadArray[i] = $(cantidad[i]).html();
        valorItemArray[i] = $(valorItem[i]).html();
        idProductoArray[i] = $(idProducto[i]).attr("idProducto");

    }

    var finalArray = [];

    for(var i = 0; i < (tituloArray.length); i++){

        finalArray[i] = {titulo : tituloArray[i], cantidad : cantidadArray[i], valorItem : valorItemArray[i], idProducto : idProductoArray[i]}

    }

    completeArray = JSON.stringify(finalArray);

    $.ajax({                        
       type: "POST",                 
       url: "aux.php",                  
       data: { completeArray : completeArray }, 
       success: function(data) {

        console.log(data);

       }

    });

})

Файл aux.php, в который массив поступает правильно и var_dump дает мне правильный результат:

if(isset($_POST['completeArray'])){

$completeArray = json_decode($_POST['completeArray'], true);

var_dump("The array is", $completeArray);

Класс и функция файла платежей.php, который проверяетполя серверной формы , и здесь мне нужно иметь возможность манипулировать массивом :

class Payments {

    public function ctrCash(){

        if(isset($_POST["registroUsuario"])){

            if(preg_match('/^[a-zA-ZñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["registroUsuario"]) &&
               preg_match('/^([0-2][0-9]|3[0-1])(\/|-)(0[1-9]|1[0-2])\2(\d{4})$/', $_POST["registroCalendario"]) &&
               preg_match('/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/', $_POST["registroEmail"]) &&
               preg_match('/^(?:\D*\d){2,4}\D*$/', $_POST["registroDireccion"]) &&
               preg_match('/^[0-9]{7,12}$/', $_POST["registroTelefono"])) {

                //include ('aux.php');

}

1 Ответ

0 голосов
/ 14 декабря 2018

Как я уже упоминал в своем комментарии, ваш вывод PHP генерируется только при первом запуске скрипта, до визуализации страницы, поэтому вы не можете получить туда отправленные данные в будущем.Поэтому, если вы не отправляете данные на ту же страницу, на которой вы отображаете форму, вам нужно отобразить результат на странице из JS, а не из PHP.

Так что замените фрагмент PHPна вашей HTML-странице с помощью div, например, так: <div id='ajax_output'></div>, а затем запишите результат для него из обратного вызова success в вызове AJAX вашего Javascript:

success: function(data) {
    document.getElementById('ajax_output').innerHTML = data;
}

Так что теперь ваш aux.php может просто выводить эхорезультат ctrCash, и ваш AJAX-скрипт возьмет этот результат и отобразит его.Поэтому, когда вы вызываете функцию ctrCash внутри вашего aux.php (это скрипт, который на самом деле получает данные), передайте $completeArray в качестве параметра (и определите его в сигнатуре функции как побочную ссылку, например function ctrCash(&$completeArray)или похожие).Функция будет иметь полный доступ к исходному массиву для модификации, и после вызова aux.php может отобразить результат, как вы хотите, чтобы он отображался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...