POST http://domain/wp-admin/admin-ajax.php 400 (неверный запрос)

Я настроил форму, которая отправляет данные в таблицу базы данных с помощью AJAX, но при отправке формы получаю ошибку «400 Bad Request».

Вот моя установка:

На моем сайте WordPress есть форма, которая собирает информацию о пользователе (имя, фамилия). Когда форма отправляется, данные отправляются через AJAX в функцию PHP (add_address), определенную в файле functions.php моей дочерней темы. Предполагается, что функция PHP очищает и вставляет данные в пользовательскую таблицу базы данных (pl_addresses). Вот соответствующий код:

add_action('wp_ajax_add_address', 'add_address');
add_action('wp_ajax_nopriv_add_address', 'add_address');

function add_address()
{
    global $wpdb;

    // Sanitize input data
    $name = sanitize_text_field($_POST['address-firstname']);
    $lastname = sanitize_text_field($_POST['address-lastname']);
    

    // Prepare and execute SQL query using prepared statements
    $wpdb->insert(
        'pl_addresses',
        array(
            'name' => $name,
            'lastname' => $lastname,
        ),
        array(
            '%s', '%s'
        )
    );
}

Это код JavaScript в файле .js:

jQuery('#add_address_form').on('submit', function () {
    var form_data = jQuery(this).serializeArray();

    form_data.push({ "name": "security", "value": ajax_nonce });

    console.info('Form data:', form_data); 
    console.info('AJAX URL:', ajax_url);    

    jQuery.ajax({
        url: ajax_url, 
        type: 'post',
        data: form_data,
        success: function (response) {
            console.info('AJAX Response:', response);
            alert(response);
        },
        fail: function (err) {

            console.error("There was an error: " + err); 
            alert("There was an error: " + err);
        }
    });

    return false;
});

Эта HTML-форма:

<form id = "add_address_form" method = "post" action = "" class = "form-horizontal form-control-borderless display-none">
    <h4 class = "sub-header"><i class = "gi gi-home"></i><span>Pridėti pristatymo adresą</span></h4>
    <div class = "form-group col-md-12">
        <div class = " col-md-6 col-xs-12">
            <div class = "input-group">
                <span class = "input-group-addon"><i class = "gi gi-user"></i></span>
                <input type = "text" id = "address-firstname" name = "address-firstname" class = "form-control input-lg" placeholder = "Vardas *" required>
            </div>
        </div>
        <div class = " col-md-6 col-xs-12">
            <div class = "input-group">
                <span class = "input-group-addon"><i class = "gi gi-user"></i></span>
                <input type = "text" id = "address-lastname" name = "address-lastname" class = "form-control input-lg" placeholder = "Pavardė *" required>
            </div>
        </div>
    </div>
    <div class = "form-group form-actions col-md-12">
        <div class = "col-xs-6 text-right" style = "width:auto;">
            <button type = "submit" class = "btn btn-sm btn-success"><i class = "fa fa-plus"></i> Užregistruoti</button>
        </div>
    </div>
</form>

Также добавьте этот код в тег заголовка:

<script type = "text/javascript">
    var ajax_url = '<?php echo admin_url("admin-ajax.php"); ?>';
    var ajax_nonce = '<?php echo wp_create_nonce("secure_nonce_name"); ?>';
</script>

И я получаю такую ​​ошибку:

Я подтвердил, что URL-адрес AJAX и одноразовый номер установлены правильно. Однако, когда я отправляю форму, я получаю в консоли ошибку «400 Bad Request», и запрос AJAX завершается с ошибкой.

Что может быть причиной этой проблемы? Будем очень признательны за любые предложения по устранению неполадок или отладке.

Вы забыли передать параметр action при вызове AJAX, следовательно, 400 Bad Request.

cabrerahector 21.02.2024 19:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте этот код. Вы пропустили action: 'add_address'

jQuery('#add_address_form').on('submit', function () {
    var form_data = jQuery(this).serializeArray();

    form_data.push({ "name": "security", "value": ajax_nonce });

    console.info('Form data:', form_data); 
    console.info('AJAX URL:', ajax_url);    

    jQuery.ajax({
        url: ajax_url, 
        type: 'post',
        data: {
            action: 'add_address',
            formdata: form_data
        },
        success: function (response) {
            console.info('AJAX Response:', response);
            alert(response);
        },
        fail: function (err) {

            console.error("There was an error: " + err); 
            alert("There was an error: " + err);
        }
    });

    return false;
});

Другие вопросы по теме