当我提交一个 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事件应该只从控制器包含了成功的消息,一旦请求已经被成功验证。提前致谢!
1 回答
![?](http://img1.sycdn.imooc.com/533e4d510001c2ad02000200-100-100.jpg)
杨魅力
TA贡献1811条经验 获得超6个赞
似乎正在发生的事情是,即使您的请求在控制器中的验证失败,它仍然返回一个有效的响应,JQuery 将其视为 a success,允许它进入success前端的回调。
试试
if ($validator->fails()) {
return response()->json(["error" => "something went wrong"], 422);
}
这应该会触发错误回调。
您还可以像这样将错误传回:
return response()->json($validator->errors(), 422);
获取前端的所有错误消息。
添加回答
举报
0/150
提交
取消