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



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

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

应该发生什么

  1. 验证失败时,应启动fail事件,并显示来自控制器的正确失败消息。
  2. 成功验证请求后,success事件应仅包含来自控制器的成功消息。

提前感谢!

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

尝试

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

这应该会触发错误回调。

您也可以像这样将错误传回:

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

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

如需进一步阅读,请查看此 jQuery 错误处理文章 。

相关内容

  • 没有找到相关文章

最新更新