You need to enable JavaScript to run this app. 通过AJAX传递数组到后端报Trying to get property 'id' of non-object错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

通过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(规范传参):前端序列化后传输

如果需要保持后端的对象访问写法,可以调整前后端传参逻辑:

  1. 前端AJAX传参前先序列化数组:
$.ajax({
    type: "POST", // 业务操作建议使用POST请求,规避GET长度限制
    url: '{{url("/")}}/products',
    data: {items: JSON.stringify(items)},
    dataType: 'JSON',
    // 其余配置保持不变
});
  1. 后端解码后使用对象访问:
$productarraylist = json_decode($request->items);
foreach($productarraylist as $item){
    $product = dbtable::find($item->id);
    // 后续业务逻辑
}

补充注意

dbtable::find()如果匹配不到对应数据会返回null,后续操作$product属性前建议增加非空判断,避免再次出现同类报错。


内容的提问来源于stack exchange,提问作者Sand Eep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 00:24:02