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

Laravel 9中AJAX POST请求出现500内部服务器错误求助

Laravel 9 AJAX POST请求500内部服务器错误解决方案

问题场景

使用Laravel 9开发项目,通过AJAX实现CRUD操作,GET请求响应正常,但发送POST请求到http://127.0.0.1:8000/add/teacher时,控制台返回500(Internal Server Error)。已按要求在页面头部添加CSRF meta标签,并在AJAX请求中设置CSRF请求头,问题仍未解决。

相关代码

AJAX代码

<script>
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    $(document).ready(function() {
        $(".add_teacher").on('click', function(event) {
            event.preventDefault();
            var name = $("#name").val();
            var email = $("#email").val();
            var position = $("#position").val();
            var phone = $("#phone").val();
            var password = $("#password").val();

            $.ajax({
                method: "post",
                url: "{{route('store')}}",
                data: {
                    name: name,
                    email: email,
                    position: position,
                    phone: phone,
                    password: password
                },
                success: function(res) {
                    if (res.status == 'success') {
                        $("#exampleModal").modal('hide');
                        $("#modalform")[0].reset();
                        $(".table").load(location.href + ' .table');
                    }
                },
                error: function(err) {
                    let error = err.responseJSON;
                    $.each(error.errors, function(index, value) {
                        $(".errorMessage").append('<span class="text-danger">' + value +'</span><br>');
                    });
                }
            });
        });
    });
</script>

路由代码

Route::post('/add/teacher', [TeacherController::class,'store'])->name('store');

原控制器代码(存在错误)

public function store(Request $request)
{
    $request->validate(
        [
            "name"      => "required",
            "email"     => "requied|unique:teachers",
            "position"  => "requied",
            "phone"     => "requied|unique:tachers",
            "password"  => "requied",
        ],
        [
            "name.required" => "Name is required",
            "email.required" => "Email is required",
            "email.unique" => "Email already exists",
            "position.required" => "Postion is required",
            "phone.required" => "Phone is required",
            "phone.unique" => "Phone already exixts",
            "password.required" => "password is required",
        ]
    );

    $teacher = new Teacher();
    $teacher->name = $request->name;
    $teacher->email = $request->email;
    $teacher->position = $request->position;
    $teacher->phone = $request->phone;
    $teacher->password = $request->password;
    $teacher->save();
    return response()->json([
        'status' => 'success',
    ]);
}

错误原因分析

控制器代码中存在多处拼写错误,导致Laravel无法解析验证规则,触发致命错误:

  • requied 应为 required(验证规则关键词拼写错误)
  • tachers 应为 teachers(数据表名称拼写错误)
  • exixts 应为 exists(错误提示文本拼写错误)
  • Postion 应为 Position(错误提示文本拼写错误)

这些拼写错误会导致Laravel在执行验证逻辑时抛出异常,直接返回500内部服务器错误。

修正后的控制器代码

public function store(Request $request)
{
    $request->validate(
        [
            "name"      => "required",
            "email"     => "required|unique:teachers",
            "position"  => "required",
            "phone"     => "required|unique:teachers",
            "password"  => "required",
        ],
        [
            "name.required" => "Name is required",
            "email.required" => "Email is required",
            "email.unique" => "Email already exists",
            "position.required" => "Position is required",
            "phone.required" => "Phone is required",
            "phone.unique" => "Phone already exists",
            "password.required" => "Password is required",
        ]
    );

    $teacher = new Teacher();
    $teacher->name = $request->name;
    $teacher->email = $request->email;
    $teacher->position = $request->position;
    $teacher->phone = $request->phone;
    // 建议对密码进行哈希处理,避免明文存储
    $teacher->password = bcrypt($request->password);
    $teacher->save();
    return response()->json([
        'status' => 'success',
    ]);
}

额外调试建议

遇到500错误时,可直接查看Laravel项目的storage/logs/laravel.log文件,里面会记录具体的错误堆栈信息,能快速定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:20:30