Ajax 成功事件中显示 Laravel 验证错误

当我提交一个 Ajax 请求并且我知道数据应该失败时,我在success事件而不是fail事件中收到错误响应。


我需要将来自 Laravel 的响应发送到 Ajax 失败事件,因为我将在请求处理失败时构建自定义功能。


我已经尝试了各种尝试让它工作,但我完全不知道为什么它会回到成功事件中。我一定是傻了还是什么的!


我在控制器中的功能:


    public function add_company(Request $request)

    {


        /**

         * Validate the Add Company request

         */

        $validator = \Validator::make($request->all(), [

            'name' => 'required',

            'sector' => 'required',

            'number' => 'required',

            'email' => 'required',

        ]);


        if ($validator->fails()) {

            return response()->json(['error' => 'Something went wrong']);

        }


        DB::table('companies')->insert([

            'user_id' => Auth::id(), 

            'company_number' => $request->company_number,

            'name' => $request->name,

            'sector' => $request->sector,

            'number' => $request->number,

            'email' => $request->email,

            'address_1' => $request->address_line_1,

            'address_2' => $request->address_line_2,

            'city' => $request->city,

            'postcode' => $request->postcode,

        ]);


        return response()->json(['success' => 'Company created successfully.']);


    }

我的 Ajax 函数:


$('[data-add-company]').on('submit', function(e) {

    e.preventDefault();

    let $this = $(this);

    let action = $this.attr('action');

    let method = $this.attr('method');


    var formData = $this.serialize();


    $.ajax({

        type: method,

        url: action,

        headers: {

            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),

            'Access-Control-Allow-Origin': '*',

        },

        data: formData,

        success: function(data){

            console.log('success');

            console.log(data); // Fail messages appear here for some reason.

        },


我已经尝试使用data.success和data.error来获取正确的消息,但是当我键入它们时,它们只是未定义。


应该发生什么


在fail验证失败的事件应该启动并显示正确的从控制器发生故障的消息。

该success事件应该只从控制器包含了成功的消息,一旦请求已经被成功验证。

提前致谢!


慕标琳琳
浏览 186回答 1
1回答

杨魅力

似乎正在发生的事情是,即使您的请求在控制器中的验证失败,它仍然返回一个有效的响应,JQuery 将其视为 a success,允许它进入success前端的回调。试试        if ($validator->fails()) {           return response()->json(["error" => "something went wrong"], 422);        }这应该会触发错误回调。您还可以像这样将错误传回:          return response()->json($validator->errors(), 422);获取前端的所有错误消息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript