Передача массива с объектами в PHP через Axios

Я пытаюсь передать массив с объектами в PHP через сообщение Axios. Я использую formData для добавления или установки данных.

const product_id_list = [{ title: 'hello' }, { title: 'ohhello' }]

const bodyFormData = new FormData();
bodyFormData.append('post_id', post_id)
bodyFormData.append('action', 'uploadShowcaseContent')

product_id_list.forEach((item) => {
   bodyFormData.append('product_id_list[]',item);
});

axios.post(`${__WP_VARS.AJAX_URL}`, bodyFormData)
     .then((resp) => {
         console.log('post respect is', resp)
     })

Затем в моем PHP я пытаюсь перебрать массив и получить строку заголовка.

$content = $_POST['product_id_list'];

Переменная $ content сообщает мне, что у меня есть массив. Однако, когда я выполняю foreach в массиве

foreach ($content as $item) {
    echo $item;
}

В моем ответе консоли я получаю данные: [объект-объект] [объект-объект]

Когда я пытаюсь повторить название,

foreach ($content as $item) {
    echo $item->title;
}

Я получаю пустую строку.

Я застрял в попытке выяснить, как выполнить цикл в PHP и получить ключ объекта, значение при передаче его через AXIOS.


person anon    schedule 16.07.2020    source источник
comment
Сделайте print_r($_POST['product_id_list']);, чтобы вы могли видеть размер и форму массива, который вам передается   -  person RiggsFolly    schedule 16.07.2020
comment
Также добавьте отчет об ошибках в начало файла (ов) во время тестирования сразу после открытия PHP. тег например. Даже если вы разрабатываете на сервере, настроенном как LIVE, вы увидите все ошибки. <?php error_reporting(E_ALL); ini_set('display_errors', 1);   -  person RiggsFolly    schedule 16.07.2020
comment
@RiggsFolly Я получаю данные: Array↵ (↵ [0] = ›[object Object] ↵ [1] =› [object Object] ↵) ↵1   -  person anon    schedule 16.07.2020
comment
Это все?   -  person RiggsFolly    schedule 16.07.2020
comment
@RiggsFolly. Ну да, это все, но в PHP я не уверен, как на самом деле захватить ключ заголовка и получить значение. Даже когда я использую $ item- ›title или $ item ['title']   -  person anon    schedule 16.07.2020
comment
Ну в чем бы смысл, $content содержит массив из 2 объектов. Но объекты кажутся пустыми   -  person RiggsFolly    schedule 16.07.2020
comment
@RiggsFolly Странно, потому что я передаю const product_id_list = [{'title': 'hello'}, {'title': 'ohhello'}] через сообщение axios, поэтому у объекта есть ключ заголовка и значения   -  person anon    schedule 16.07.2020
comment
Используйте отладчик broiwser (F12), чтобы посмотреть, что отправляется / получается с помощью вкладки Network   -  person RiggsFolly    schedule 16.07.2020


Ответы (1)


Здесь вы передаете строку много раз, меняя значение:

bodyFormData.append('product_id_list[]',item);

поэтому вы фактически отправляете строку вместо массива. Вместо этого вы должны просто структурировать свои массивы и объекты перед их отправкой:

const product_id_list = [{ title: 'hello' }, { title: 'ohhello' }]

const bodyFormData = new FormData();
bodyFormData.append('post_id', post_id)
bodyFormData.append('action', 'uploadShowcaseContent')
bodyFormData.append('product_id_list',JSON.stringify(product_id_list));

...

затем, чтобы увидеть, что вы на самом деле получаете на php:

$content = $_POST['product_id_list'];
var_dump($content)
person Raffobaffo    schedule 16.07.2020
comment
Спасибо, поэтому я получаю взамен строку var_dump (47) \ [{\\\ title \\\: \\\ hello \\\}, {\\\ title \\\: \\\ ohhello \\ \}] \ ↵ Однако на стороне PHP я не могу понять, как пройти через этот $ content, даже когда я пытался его декодировать. Кажется, я не могу получить название - person anon; 16.07.2020
comment
Ok. Теперь в php удалите var_dump и измените: $content = json_decode($content,1);, затем в следующей строке echo $content[0]['title']; - person Raffobaffo; 16.07.2020
comment
Получение пустой строки на моей стороне - person anon; 16.07.2020
comment
Если вы удалите JSON.stringify (... из вашего js, на var_dump в php, что вы получите? - person Raffobaffo; 16.07.2020
comment
Если я удалю JSON.stringify и var_dump $ content, я получу возвращаемые данные: string (31) \ [object Object], [object Object] \ ↵ - person anon; 16.07.2020
comment
Прохладный. Попробуйте: изменить var_dump на: var_dump(json_decode($content)); - person Raffobaffo; 16.07.2020
comment
Теперь получаем данные: NULL↵. знак равно Не знаю, что происходит, никогда раньше не пытался отправить массив с объектами в PHP через Ajax / axios - person anon; 16.07.2020
comment
Давайте исследуем это. Попробуйте вернуть stringify и var_dump(json_decode($content)); - person Raffobaffo; 16.07.2020
comment
Ах! Я пробовал это $ json_string = stripslashes ($ content); Затем я могу $ data = json_decode ($ json_string, true) и перебрать $ data сейчас! :) Вы направили меня в правильном направлении, поэтому я отмечу, что это принято, благодарю за вашу помощь! - person anon; 16.07.2020
comment
Супер! Отлично помогает! - person Raffobaffo; 16.07.2020