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

Laravel Ajax CRUD返回按钮失效且触发SQL非空约束错误

问题根源

返回按钮使用type="submit",点击时会触发表单的submit事件,而你绑定的.create_form提交逻辑会默认将空表单数据提交到store路由,触发数据库字段非空约束错误;同时返回按钮的Ajax请求完全多余,直接跳转即可。


解决方案

1. 修改返回按钮类型

将返回按钮的type="submit"改为type="button",避免触发表单提交:

<div class="div2">
    <form method="post" name="form" class="create_form" action="{{ route('students.store') }}" enctype="multipart/form-data">
        @csrf
        Name <input type="text" name="name" id="name"><br><br>
        Email <input type="text" name="email" id="email"><br><br>
        Contact <input type="text" name="contact" id="contact"><br><br>
        Course <input type="text" name="course" id="course"><br><br>

        <button type="submit" class="save_create">Save</button>
        <!-- 修改按钮类型为button -->
        <button type="button" class="back_create">Back</button>
    </form>
</div>

2. 简化返回按钮JS逻辑

无需Ajax请求,直接跳转列表页:

// 表单提交逻辑保持不变
$(document).on('submit', '.create_form', function(event) {
  event.preventDefault();
  var data = $(this).serialize();
  $.ajax({
    url: "{{ route('students.store') }}",
    data: data,
    type: "POST",
    dataType: "json",
    success: function(response) {
      window.location.href = "{{ route('students.index') }}";
    },
    error: function(error) {
      console.log("Errors :", error);
    }
  });
});

// 简化返回按钮跳转逻辑
$(".back_create").on("click", function(event) {
  window.location.href = "{{ route('students.index') }}";
});

3. 后端添加表单验证(可选)

在StudentController的store方法中添加验证,避免前端验证失效后触发数据库错误:

public function store(Request $request)
{
    $request->validate([
        'name' => 'required|string',
        'email' => 'required|email',
        'contact' => 'required|string',
        'course' => 'required|string',
    ]);

    // 执行数据保存
    Student::create($request->only(['name', 'email', 'contact', 'course']));

    return response()->json(['success' => 'Student created successfully']);
}

关于之前formaction导致保存失效的原因

当你在表单submit事件中使用$(this).attr('formaction')时,会将表单的默认提交地址改为返回按钮的formaction值,导致保存按钮点击时也会提交到列表页路由(GET请求),进而触发保存逻辑失效。修改返回按钮类型后即可避免该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:33:20