Laravel Ajax表单POST请求出现500内部服务器错误求助
解决Laravel Ajax提交出现500内部服务器错误的问题
错误根源
从错误日志可以明确看到核心问题:
SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value
你的users数据库表中name字段为必填项且未设置默认值,但创建用户时没有给该字段赋值,导致数据库插入操作失败,触发500内部服务器错误。
解决方案
方案1:补充name字段的输入与赋值
如果业务要求用户必须填写名称,按以下步骤修改:
- 在HTML表单中添加name输入框
<form class="mt-5 text-start" id="firstForm" method="post"> <!-- 新增name输入 --> <label class="text-white main-font">Name</label> <input type="text" name="name" id="nameInput" class="form-control mb-2" placeholder="Enter your name here"> <!-- 原有email、password等字段保持不变 --> <label class="text-white main-font">Email</label> <input type="email" name="email" id="emailInput" class="form-control mb-2" placeholder="Enter your email here"> <label class="text-white main-font">Password</label> <input type="password" name="password" id="passwordInput" class="form-control password mb-2" placeholder="Enter your password here"> <!-- 其余表单内容不变 --> </form>
- 在控制器中为name字段赋值
public function create(Request $request) { $user = new User; $user->name = $request->name; // 新增name字段赋值 $user->email = $request->email; $user->password = Hash::make($request->password); $user->save(); // Ajax期望JSON响应,替换原返回view的代码 return response()->json(['success' => true, 'message' => '注册成功']); }
- 修正Ajax中的this指向问题
箭头函数中this不指向表单元素,导致$(this).serialize()无法正确获取表单数据,修改为:
$("#firstForm").on("submit", (e)=>{ e.preventDefault() let dataString = $(e.target).serialize(); // 用e.target指代当前表单 // 其余代码保持不变 })
方案2:修改数据库表结构(如果允许name为空)
如果业务允许用户名称为空,可以直接修改users表,将name字段设置为允许NULL,或者给字段设置默认值(如空字符串)。
额外注意事项
确保User模型的$fillable属性包含需要赋值的字段,避免批量赋值错误:
class User extends Model { protected $fillable = ['name', 'email', 'password']; }
内容的提问来源于stack exchange,提问作者Thant Htet Aung
相关产品推荐
相关产品推荐

