gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:23:29 26 4
gpt4 key购买 nike

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

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

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

我在 Controller 中的功能:

    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.
},
error: function(data) {
console.log('error');
console.log(data);
},
});
});

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

应该发生什么

  1. fail 事件应在验证失败时启动,并显示来自 Controller 的正确失败消息。
  2. success 事件应该只包含来自 Controller 的成功消息,一旦请求被成功验证。

提前致谢!

最佳答案

似乎正在发生的事情是,即使您的请求在 Controller 中的验证失败,它仍然返回一个有效的响应,JQuery 将其视为 success,允许它进入 success 在前端回调。

尝试

        if ($validator->fails()) {
return response()->json(["error" => "something went wrong"], 422);
}

这应该会触发错误回调。

你也可以像这样传回错误:

          return response()->json($validator->errors(), 422);

获取前端的所有错误信息。

如需进一步阅读,请查看此 jQuery error handling article .

关于javascript - Ajax 成功事件中显示 Laravel 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com