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

如何将Laravel验证错误数传递到JavaScript变量中

解决Laravel验证错误数传递到JavaScript并通过SweetAlert提示的方案

问题原因

你当前的代码无效,核心原因是点击提交按钮时表单还未完成提交,Laravel的$errors集合此时是空的,自然拿不到错误数。而且这种写法仅在表单提交后页面刷新的场景下才可能生效,但你需要的是提交后直接用JS提示,得换正确的传递逻辑。

方案一:传统表单提交(页面刷新场景)

如果是普通表单提交(提交后页面刷新),可以在页面加载时就把错误数注入到JS变量,而非点击按钮时才获取:

<!-- 在页面底部、引入业务JS之前,先注入错误数据 -->
<script>
    const errorCount = {{ $errors->count() }};
    // 页面加载完成后检查是否有验证错误
    document.addEventListener('DOMContentLoaded', function() {
        if (errorCount > 0) {
            Swal.fire({
                icon: 'error',
                title: '必填项未填写',
                text: `您还有 ${errorCount} 个必填项未完成,请检查后重试`
            });
        }
    });
</script>

方案二:AJAX无刷新提交场景

如果用AJAX提交表单,无需依赖Laravel的$errors集合,直接在后端返回错误数,前端接收后处理:

后端Laravel控制器代码

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        // 自定义你的验证规则
        'name' => 'required',
        'email' => 'required|email',
    ]);

    if ($validator->fails()) {
        return response()->json([
            'success' => false,
            'error_count' => $validator->errors()->count(),
            'errors' => $validator->errors()
        ], 422);
    }

    // 验证通过后的业务逻辑
    return response()->json(['success' => true]);
}

前端AJAX代码

$("#btn-submit").click(function(event) {
    event.preventDefault(); // 阻止默认表单提交行为

    $.ajax({
        url: '/your-form-action-url', // 替换为你的表单提交路由
        method: 'POST',
        data: $('#your-form-id').serialize(), // 替换为你的表单ID
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function(response) {
            // 提交成功的提示
            Swal.fire('提交成功!', '', 'success');
        },
        error: function(xhr) {
            if (xhr.status === 422) {
                const errorCount = xhr.responseJSON.error_count;
                Swal.fire({
                    icon: 'error',
                    title: '必填项未填写',
                    text: `您还有 ${errorCount} 个必填项未完成,请检查后重试`
                });
            }
        }
    });
});

注意事项

  • 确保已引入SweetAlert的JS和CSS文件
  • AJAX场景下必须携带CSRF令牌,避免Laravel的CSRF验证错误
  • 传统提交场景中,$errors仅在表单验证失败后才有数据,因此页面加载时判断即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:30:54