【问题标题】:Passing array with objects to PHP via Axios通过 Axios 将带有对象的数组传递给 PHP
【发布时间】:2020-11-06 08:21:10
【问题描述】:

我正在尝试通过 Axios 帖子将包含对象的数组传递给 PHP。 我正在使用 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;
}

在我的控制台响应中,我得到 data: "[object Object][object Object]"

当我试图呼应标题时,

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

我得到一个空字符串。

我一直在试图弄清楚如何在 PHP 中循环并在通过 AXIOS 传递对象时获取对象键和值。

【问题讨论】:

  • 做一个print_r($_POST['product_id_list']);,这样你就可以看到你正在传递的数组的大小和形状
  • 例如,在打开 PHP 标记之后,测试时也将error reporting 添加到文件的顶部。即使您在配置为 LIVE 的服务器上进行开发,您现在也会看到任何错误。 <?php error_reporting(E_ALL); ini_set('display_errors', 1);
  • @RiggsFolly 我得到数据:“Array↵(↵ [0] => [object Object]↵ [1] => [object Object]↵)↵1”
  • 这就是一切吗?
  • @RiggsFolly。是的,它就是一切,但在 PHP 中,我不确定如何实际获取标题键并获取值。即使我做 $item->title 或 $item['title']

标签: php arrays json axios


【解决方案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)

【讨论】:

  • 谢谢,所以我在 var_dump "string(47) \"[{\\\"title\\\":\\\"hello\\\"},{ \\"title\\\\":\\\\"ohhello\\\\"}]\\"↵" 但是,在 PHP 端,即使我尝试解码,我也无法弄清楚如何循环访问此 $content它。我似乎无法检索标题
  • 好的。现在在 php 中删除 var_dump,然后更改:$content = json_decode($content,1); 然后在下一行 echo $content[0]['title'];
  • 在我这边得到一个空字符串
  • 如果你从你的 js 中删除 JSON.stringify(...,在 php 中的 var_dump 上你会得到什么?
  • 如果我删除 JSON.stringify 和 var_dump $content,我会得到返回数据:"string(31) \"[object Object],[object Object]\"↵"
猜你喜欢
  • 1970-01-01
  • 2020-07-12
  • 2019-07-30
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
相关资源
最近更新 更多