javascript - 在 PHP Laravel 中解析和循环 javascript 对象数组

标签 javascript php json laravel javascript-objects

我想将这个对象数组解析为 PHP 可以读取的内容,以便我可以将其保存到数据库中。 这是对象数组,来自控制台日志,并且是发送到我的 axios 帖子的内容:

"user_id": 4,
Array [
  Object {
    "cartID": "33S",
    "id": 33,
    "image": "http://myurl/uploads/5db88f40c857dtest.jpg",
    "name": "testt",
    "quantity": 1,
    "size": "S",
  },
  Object {
    "cartID": "32S",
    "id": 32,
    "image": "https://dummyimage.com/600x400/000/fff",
    "name": "pottery",
    "quantity": 1,
    "size": "S",
  },
  Object {
    "cartID": "34S",
    "id": 34,
    "image": "http://myurl/uploads/5db8918fac485test.jpg",
    "name": "Nature",
    "quantity": 1,
    "size": "S",
  },
]

在 PHP 上我有:

public static function AddOrder(Request $request)
{
    $add = DB::table('Orders')->insert([
        'user' => $request->user_id
    ]);

    $items = json_decode($request->cartItems, true);

    foreach ($items as $item) {
        DB::table('order_items')->insert([
            'order_id' => DB::table('orders')->latest('user_id')->first(),
            'product'  => $item->id,
            'quantity' => $item->quantity,
            'size'     => $item->size
        ]);
    }
    return $add;
}

每当我尝试此操作时,我总是会收到错误 cartItems can't be null。我什至尝试过在运行 AddOrder 中的任何内容之前仅返回 cartItems,但它只是说它为空。我正在使用 axios 发送它,如下所示:

 axios.post('http://myurl/api/orders/create', {
    cartItems: cart,
    user_id: user.id
  })
  .then(res => {
    console.log(res.data)
  })
  .catch(err => {
    console.log(err)
  })

我也尝试过另一种方式

    let newReq = {
      user_id: 1
  };

  for(let i = 0; i < cart.length; i++) {
      Object.keys(cart[i]).forEach((key) => {
          let newkey = 'cartItems[' + i + '][' + key + ']';

          newReq[newkey] = cart[i][key];
      });
  }

发送后,在 Laravel 上响应我使用的客户端:

return response()->json($request->all());

我明白

Object {
  "cartItems[0][cartID]": "33S",
  "cartItems[0][id]": 33,
  "cartItems[0][image]": "http://trayvonnorthern.com/Edgewood-API/public/uploads/5db88f40c857dtest.jpg",
  "cartItems[0][name]": "testt",
  "cartItems[0][quantity]": 1,
  "cartItems[0][size]": "S",
  "cartItems[1][cartID]": "32S",
  "cartItems[1][id]": 32,
  "cartItems[1][image]": "https://dummyimage.com/600x400/000/fff",
  "cartItems[1][name]": "pottery",
  "cartItems[1][quantity]": 1,
  "cartItems[1][size]": "S",
  "cartItems[2][cartID]": "34S",
  "cartItems[2][id]": 34,
  "cartItems[2][image]": "http://trayvonnorthern.com/Edgewood-API/public/uploads/5db8918fac485test.jpg",
  "cartItems[2][name]": "Nature",
  "cartItems[2][quantity]": 1,
  "cartItems[2][size]": "S",
  "user_id": 1,
}

当我这样做的时候

return response()->json($request->cartItems);

它什么也不返回。

最佳答案

axios似乎不接受我之前回答中使用的请求格式,所以我删除了它。但是,它似乎接受这种格式的请求(这就是您最初使用的格式。我的错误,真的):

let request = {
    user_id: 1,
    cartItems: [
        {
            "cartID": "33S",
            "id": 33,
            "image": "http://myurl/uploads/5db88f40c857dtest.jpg",
            "name": "testt",
            "quantity": 1,
            "size": "S",
        },
        {
            "cartID": "32S",
            "id": 32,
            "image": "https://dummyimage.com/600x400/000/fff",
            "name": "pottery",
            "quantity": 1,
            "size": "S",
        },
        {
            "cartID": "34S",
            "id": 34,
            "image": "http://myurl/uploads/5db8918fac485test.jpg",
            "name": "Nature",
            "quantity": 1,
            "size": "S",
        }
    ]
}

然后,您可以使用 axios.post 发送 request 对象。要在后端访问它,请使用 $items = $request->cartItems。无需解析它。

关于javascript - 在 PHP Laravel 中解析和循环 javascript 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58626262/

相关文章:

javascript - 将 CSRFToken 添加到 Ajax 请求

javascript - 为什么我是JavaScript循环的事实计数器?

php - 是否可以通过 PHP 访问 REQUEST_FILENAME?

php - 使用文件句柄获取文件名(或删除文件)

javascript - 引用 JSON 树结构分支的最佳方法是什么?

javascript - 使用 getJSON 中的数据填充工具提示

javascript - 谷歌地图 API : Code stops work after making a change

javascript - 这行 JQuery 代码是什么意思?

php - 验证是否选择了要在 codeigniter 中上传的文件

c# - 如何使用相同的 MVC Controller 方法处理数组或单个对象?