Я настроил форму, которая отправляет данные в таблицу базы данных с помощью 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 завершается с ошибкой.
Что может быть причиной этой проблемы? Будем очень признательны за любые предложения по устранению неполадок или отладке.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте этот код. Вы пропустили 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;
});
Вы забыли передать параметр action при вызове AJAX, следовательно, 400 Bad Request.