Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP Laravel中解析和循环javascript对象数组_Javascript_Php_Json_Laravel_Javascript Objects - Fatal编程技术网

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

在PHP Laravel中解析和循环javascript对象数组,javascript,php,json,laravel,javascript-objects,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

我想将这个对象数组解析为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,我有:

公共静态函数AddOrder(Request$Request)
{
$add=DB::表('Orders')->insert([
“用户”=>$request->user\u id
]);
$items=json_decode($request->cartItems,true);
foreach($items作为$item){
DB::table('order_items')->插入([
'order_id'=>DB::table('orders')->latest('user_id')->first(),
“产品”=>$item->id,
“数量”=>$item->quantity,
'size'=>$item->size
]);
}
返回$add;
}
每当我尝试这个,我总是得到一个错误,cartItems不能为空。我甚至尝试过在运行
AddOrder
中的任何内容之前返回cartItems,但它只是说它是空的。我使用axios发送它的方式如下:

axios.post('http://myurl/api/orders/create', {
购物车项目:购物车,
user\u id:user.id
})
。然后(res=>{
console.log(res.data)
})
.catch(错误=>{
console.log(错误)
})
我也试过另一种方法

    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];
      });
  }
我明白了

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似乎不接受我在上一次回答中使用的请求格式,因此我将其删除。但是,它似乎接受这种格式的请求(这是您最初使用的格式。我的错误,真的):


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

使用Axios向Laravel API发送对象或数组时,请尝试将负载转换为JSON字符串

在你的客户端试试这个

const your_payload_object = { user_id : 1, cart_items:[{id:1},{id:2},{id:3}] };

axios.post(url, JSON.stringify(your_payload_object), {"Content-type": "application/json"})
您可以像这样访问laravel上的数据

$userId = $reequest->user_id;

$cart_items = $request->cart_items;

// Which will be an array as given below
//
// $cart_items = 
//      [ 
//         ["id" => 1], 
//         ["id" => 2], 
//         ["id" => 3] 
//      ];

当您使用
$request->user\u id
时,它是否也为空?请添加一个
dd($request->all())在你的问题中。是的,当我做一个return$请求时,我只得到一个空的arrayas,Jean说,请做
dd($request->all())
在您的
AddOrder
的一开始,确保您已经从axios requestWell获得了任何数据。我正在使用laravel作为REST API。不仅仅是将响应返回到我的客户端会实现同样的效果吗?
dd
返回一个生成的HTML页面,其中包含可读格式的响应内容。在您的情况下,返回
response()->json($request->all())
应该就足够了。现在,这允许我获取cartItems。令人惊叹的!现在还有一个问题。我尝试了一个类似以下内容的foreach:foreach($cartimes as$cartimes){return response()->json($item->name)}但出现了一个错误。仅返回$item会返回一个对象,但无法访问属性。抱歉,这是我第一次尝试使用客户端购物车并将其转换为PHParray@MikeShiv是否使用对象表示法或数组表示法访问项目属性?对象表示法。因为我使用的是移动应用程序,所以很难分辨出500个错误,但当我尝试使用postman时,我得到的是一个无效的理由foreach@MikeShiv尝试使用如下数组表示法:
$size=$request->cartItems[0]['size']。Laravel不会将对象解析回对象,而是将其解析回键控数组。
const your_payload_object = { user_id : 1, cart_items:[{id:1},{id:2},{id:3}] };

axios.post(url, JSON.stringify(your_payload_object), {"Content-type": "application/json"})
$userId = $reequest->user_id;

$cart_items = $request->cart_items;

// Which will be an array as given below
//
// $cart_items = 
//      [ 
//         ["id" => 1], 
//         ["id" => 2], 
//         ["id" => 3] 
//      ];