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

Laravel表单Ajax更新报错:Creating default object from empty value求助

解决 "Creating default object from empty value" 错误及Ajax提交失败问题

我帮你一步步排查问题,这个错误本质是你尝试给一个null对象赋值属性导致的,结合你的代码来看,主要有几个关键问题需要修正:

1. 核心问题:传递的ID无法找到对应的Profile实例

你的控制器用Profile::find($usr_id)获取模型,但Ajax里传递的ID不对:

  • 你在脚本里取的是$('#emp_id').val(),但如果你的Profile模型主键是默认的id(而非emp_id),这个值根本不是Profile的主键,find()会返回null,后续给$profile->first_name赋值自然会报错。
  • 表单里的隐藏字段<input type="hidden" name="usr_id" id="usr_id">也没赋值,明显是混淆了ID参数。

修正:
先在表单里添加正确的Profile主键隐藏字段:

<input type="hidden" name="usr_id" id="usr_id" value="{{ $profile->id }}">

然后把Ajax里的ID获取改成:

var usr_id = $('#usr_id').val();

2. 表单输入框缺少name属性

你表单里的first_name和last_name只有id,没有name属性:

<input type="text" class="form-control" id="first_name" value="{{$profile->first_name}}" placeholder="First Name">

$('#editProfile').serialize()只会收集带name属性的字段值,控制器里$request->input('first_name')根本拿不到数据。

修正:给输入框补上name属性:

<input type="text" class="form-control" id="first_name" name="first_name" value="{{$profile->first_name}}" placeholder="First Name">
<input type="text" class="form-control" id="last_name" name="last_name" value="{{$profile->last_name}}" placeholder="Last Name">

3. Ajax配置错误:dataType和data搞混了

你在Ajax里写错了参数:

dataType: $('#editProfile').serialize(),

dataType是用来指定预期的服务器响应类型(比如json),而提交的数据应该用data参数。

修正:

$.ajax({
    type: "PUT",
    url: "/profile/edit/" + usr_id,
    data: $('#editProfile').serialize(), // 这里改成data
    dataType: 'json', // 可选,根据你的响应类型设置
    success: function (response) {
        console.log(response);
        alert("Data Updated");
        // 可以不用强制刷新页面,直接更新页面显示的内容更友好
        // location.reload();
    },
    error:function(error){
        console.log(error);
    }
});

4. 控制器代码优化(可选但推荐)

为了避免后续踩坑,可以给控制器加个实例判断,或者用findOrFail()直接抛出404错误,同时用save()更符合单实例更新的场景:

public function update(Request $request, $usr_id) {
    // 找不到实例直接抛出404,更直观
    $profile = Profile::findOrFail($usr_id);
    $profile->first_name = $request->input('first_name');
    $profile->last_name = $request->input('last_name');
    $profile->save();

    // 返回JSON响应给Ajax
    return response()->json(['success' => 'Profile updated successfully']);
}

按照上面的步骤修正后,你的Ajax提交应该就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:47