Задать вопрос
@alex0176

Как правильно отправка данные с помощью Fetch() в Wordpress?

Привет!
Столкнулся с такой проблемой:
Пытаюсь сделать запрос с помощью Fetch() для отправки запроса и передачи данных в формате JSON в Wordpress
Использую первый способ отправки:
let params = {
                action: 'ajax_get_taxonomies',
                nonce_code : _fg_object.getTaxAJAX_nonce,
                params: JSON.stringify([1,2,3])
            }
            try {
                const response = await fetch(_fg_object.ajax_url,
                    {
                        method: 'POST',
                        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
                        body: new URLSearchParams(params)
                    })

                if (response.ok) {
                    const data = await response.json();
                    console.log(data.taxonomies);
                } else {
                    console.error("Error HTTP: " + response.status);
                }
            }
            catch(e) {
                console.error('Error occurred!')
            }

При использовании объекта new URLSearchParams(params) все успешно отправляется
Но когда использую другой способ отправки с использованием JSON.stringify() данные не отправляться и получаем ошибку 400 (Bad Request)
const response = await fetch(_fg_object.ajax_url,
                    {
                        method: 'POST',
                        headers: { "Content-Type": "application/json", },
                        body: JSON.stringify({
                            action: "ajax_get_taxonomies",
                            nonce_code : _fg_object.getTaxAJAX_nonce,
                            data: {
                                username: "JohnDoe",
                                message: "Hello from fetch!"
                            }
                        }),
                    })


В чем может быть проблема? С использованием body: new URLSearchParams(params) все работает, а когда отправляем через тело запроса body: JSON.stringify({}) - нет
Спасибо за любой совет.
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@historydev Куратор тега JavaScript
Mistkerl, drück den Knopf.
Здесь ты отправляешь массив: JSON.stringify([1,2,3])
А здесь объект: JSON.stringify({action: "ajax_get_taxonomies",

Полагаю должно быть так:
body: JSON.stringify([
                       {
                            action: "ajax_get_taxonomies",
                            nonce_code : _fg_object.getTaxAJAX_nonce,
                            data: {
                                username: "JohnDoe",
                                message: "Hello from fetch!"
                            }
                        }
]),
Ответ написан
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
WordPress может не распознать запрос как AJAX, если не указан X-Requested-With
const response = await fetch(_fg_object.ajax_url, {
    method: 'POST',
    headers: { 
        "Content-Type": "application/json",
        "X-Requested-With": "XMLHttpRequest" // Важно для WordPress
    },
    body: JSON.stringify({
        action: "ajax_get_taxonomies", 
        nonce_code: _fg_object.getTaxAJAX_nonce, 
        data: {
            username: "JohnDoe",
            message: "Hello from fetch!"
        }
    }),
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы