通过AJAX传递数组到后端报Trying to get property 'id' of non-object错误如何解决
错误根因
后端接收到的$request->items为关联数组格式,并非对象,使用对象运算符->访问数组元素属性就会触发"Trying to get property 'id' of non-object"报错。
尝试调用json_decode报错是因为PHP已经自动完成了前端传参的结构化解析,无需再执行JSON解码操作,json_decode要求入参为JSON字符串,传入解析完成的数组自然会抛出类型错误。
解决方案
方案1(最简修改):将对象访问改为数组访问
直接替换循环内的属性获取语法即可:
$productarraylist = $request->items; foreach($productarraylist as $item){ $product = dbtable::find($item['id']); // 后续业务逻辑 }
方案2(规范传参):前端序列化后传输
如果需要保持后端的对象访问写法,可以调整前后端传参逻辑:
- 前端AJAX传参前先序列化数组:
$.ajax({ type: "POST", // 业务操作建议使用POST请求,规避GET长度限制 url: '{{url("/")}}/products', data: {items: JSON.stringify(items)}, dataType: 'JSON', // 其余配置保持不变 });
- 后端解码后使用对象访问:
$productarraylist = json_decode($request->items); foreach($productarraylist as $item){ $product = dbtable::find($item->id); // 后续业务逻辑 }
补充注意
dbtable::find()如果匹配不到对应数据会返回null,后续操作$product属性前建议增加非空判断,避免再次出现同类报错。
内容的提问来源于stack exchange,提问作者Sand Eep
相关产品推荐
相关产品推荐

