Добрый день, alex076!
Во втором фрагменте кода, вы преобразовали 'action', 'none', 'data' в JSON, что неверно.
1. Хук (он же action/крючок) и nonce-выражение должны передаваться, как есть, они не имеют отношения к данным, которые вы пытаетесь отправить на сервер. Из-за этого возникает ошибка "Bad Request". Так как ваш action вызова AJAX события в WordPress ожидает "параметр URL", а не строку.
2. В первом примере, код срабатывает, так как в строку преобразуется только значение свойства params, а свойства action и nonce_code остаются параметрами, что верно:
action: 'ajax_get_taxonomies',
nonce_code : _fg_object.getTaxAJAX_nonce,
params: JSON.stringify([1,2,3])
3. Наиболее верным подходом, по моему мнению, является использование FormData():
let params = {
username: "JohnDoe",
message: "Hello from fetch!",
items: [1, 2, 3]
};
const jsonString = JSON.stringify(params);
let formData = new FormData();
formData.append('nonce', '_fg_object.getTaxAJAX_nonce');
formData.append('action', 'ajax_get_taxonomies');
formData.append('foo', 'bar'); # Передача любой строки
formData.append('json', jsonString) # Передача JSON
const response = await fetch(_fg_object.ajax_url, {
method: 'POST',
body: formData
})
5. FormData позволяет обработать параметры через $_POST:
public function wpAjaxHandler()
{
# Простая строка
if ($_POST['foo']) {
$bar = $_POST['foo'];
}
# JSON
if ($_POST['json']) {
$decodedJson = json_decode($_POST['json'], true, 512);
}
}
Успехов!