You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

客户端管理系统订单提交报错:Undefined array key 'name'求助

订单创建API报错排查:Undefined array key "name" 及JSON解析失败

解析响应JSON出错:SyntaxError: Unexpected token '<', "<" 不是有效的JSON
收到的内容非有效JSON:<!-- ErrorException: Undefined array key "name" in file C:\Users\mjver\OneDrive\Documents\Coding\client-api\routes\api.php on line 238

问题分析

错误的核心原因有两个:一是后端无法从JSON请求中正确获取name字段,二是后端抛出错误时返回了HTML页面而非JSON,导致前端解析失败。结合你的代码片段,以下是具体修复步骤:

1. 修正Laravel对JSON请求的解析逻辑

前端发送的是Content-Type: application/json格式的请求,Laravel中$request->all()默认优先解析表单数据,无法直接获取JSON请求体的内容。需要改用JSON专用的解析方法:

Route::post('/orders/create', function(Request $request){
    // 替换原$request->all(),正确获取JSON请求体数据
    $data = $request->json()->all();

    if(!Orders::where('orderNo', '=', $data['orderNo'])->exists()){
        // 后续逻辑保持不变
    }
});

2. 修复模型可填充字段不匹配问题

你的Orders模型中$fillable定义的是product字段,但后端创建订单时使用的是name字段,这不仅会导致Eloquent批量赋值失败,还可能引发字段混淆。根据实际数据库字段调整:

class Orders extends Model
{
    use HasFactory;

    protected $fillable = [
        'name', // 替换原'product',若数据库字段确实是product则反过来调整后端代码的字段名
        'qty',
        'option',
        'orderNo',
        'userId',
        'price',
        'fee',
        'date',
    ];

    public function product (){
        return $this->hasMany(Product::class);
    }
}

3. 前端参数校验增强

在sendOrder方法中补充日志,确认所有传入参数的完整性,避免因前端数据缺失导致后端报错:

async sendOrder(){
    console.log('Cart数据:', this.cart);
    console.log('订单号:', this.orderNum);
    console.log('用户ID:', this.id);
    
    const order = await APIController.CreateOrder(this.cart.name, this.cart.qty, this.cart.option, this.cart.price, this.orderNum, this.cart.fee, this.cart.date, this.id);
    if(order){
        store.dispatch('clearCart');
    }
},

4. 后端错误处理优化

添加异常捕获逻辑,确保无论是否出错都返回JSON格式响应,避免前端解析HTML失败:

Route::post('/orders/create', function(Request $request){
    try {
        $data = $request->json()->all();

        if(!Orders::where('orderNo', '=', $data['orderNo'])->exists()){
            $order = Orders::create([
                "name" => $data["name"],
                "qty" => $data["qty"],
                "option" => $data["option"],
                "orderNo" => $data["orderNo"],
                "userId" => $data["userId"],
                "price" => $data["price"],
                "fee" => $data["fee"],
                "date" => $data["date"],
            ]);

            return response()->json([
                "success" => !empty($order->id),
                "response" => empty($order->id) 
                    ? ["error" => "An unusual error has occurred"]
                    : ["order" => $order]
            ]);
        } else {
            return response()->json([
                "success" => false,
                "response" => [
                    "error" => "The inventory item already exists"
                ]
            ]);
        }
    } catch (\Exception $e) {
        return response()->json([
            "success" => false,
            "response" => [
                "error" => $e->getMessage()
            ]
        ], 500);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:35:25