PHP - AJAX - значение POST массива группы полей всегда говорит о неопределенном индексе - PullRequest
0 голосов
/ 29 апреля 2020

Платформа: WordPress

У меня есть группа из двух клонируемых полей name и email. Поэтому, когда пользователь клонирует, у него будет набор полей name и email.

Примечание: Эти поля были недавно добавлены в мой код, и AJAX отлично работал с старый код без двух недавно добавленных полей.

Код ajax всегда дает мне неопределенный индекс name ошибка. Точную ошибку смотрите ниже в файле debug.log

PHP Примечание: неопределенный индекс: имя в ... / cart-add-process- ajax. php на строка 89

Код строки 89

Приведенный ниже код для проверки, имеют ли оба поля одинаковое количество элементов массива. Поэтому позже я могу объединить их в ассоциативный массив.

Кроме того, эти поля являются опциями, поэтому, если пустое AJAx все еще должно обрабатываться.

if (count($_POST[ 'name' ]) != count($_POST[ 'email' ])) {

    // throw customers error
    wp_send_json_error(__('Customer details are incorrect', 'online-shop'));
} 

AJAX

$('form.addtocartform').on('submit', function (e) {
    e.preventDefault();

    let names = [];
    let emails = [];

    $('input[name="name"]').each(function () {
        names.push(this.value);
    });

    $('input[name="email"]').each(function () {
        emails.push(this.value);
    });

    $.ajax({

        method: 'POST',
        dataType: 'json',
        url: ajax_vars.ajax_url,
        data: {
            action: 'gs_add_to_cart',
            nonce: ajax_vars.nonce,
            group_id: $('#group_id').val(),
            product: $('#product').val(),
            qty: $('#qty').val(),
            name: names,
            email: emails,
            product_option: $('#product_option').val(),
        },
        ...
    }
}

HTML

<form method="POST" id="gsAddToCart" class="addtocartform" action="">
    <label for="product_option" class="gs-label">Options</label><select name="product_option" id="product_option" class="gs-select-box"><option value="">Select option</option><option value="0">Salty</option><option value="1">Sweet</option><option value="2">Bitter</option></select>
    <label for="qty" class="gs-label">Qty.</label>
    <input type="number" name="qty" id="qty" class="gs-number" min="1" step="1" value="1">

    <!-- these fields in the div are clonable and here I have a problem -->
    <div id="entry1" class="clonedInput gs-customer-fields">
        <input class="gs-field" type="text" name="name[]" placeholder="Name">
        <input class="gs-field" type="email" name="email[]" placeholder="Email">
    </div>
    <span class="gs-customer-delete" id="btnDel" disabled="disabled">delete</span>
    <span class="gs-customer-add" id="btnAdd">add</span>

    <input type="hidden" id="product" name="product" value="168">
    <input type="hidden" id="group_id" name="group_id" value="298">
    <input type="hidden" id="_gs_nonce" name="_gs_nonce" value="3676c059a6"><input type="hidden" name="_wp_http_referer" value="/products/id-adipisci-dolores-dicta/?group_id=298">
</form>

Вопрос :

Как обработать ajax с помощью клонируемых полей формы, чтобы я мог получить как массив в PHP?

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