猿问

laravel5.4通过ajax提交表单获取到422返回,ajax无法捕获返回内容

1.通过ajax提交表单,如果验证不通过,则会返回http状态值为422的json
2.该json的格式如何自定义?
3.http状态值422,貌似已经在框架里面写死了。我想通过捕获验证异常的形式返回自定义的json到前端,这个能实现吗?
4.利用jquery的ajax方法在error的时候还是拿不到格式化成json对象的的返回数据,只能拿到一个字符串形式的json

MYYA
浏览 1111回答 2
2回答

扬帆大鱼

json格式这个自己根据需要定义,没有什么多说的,后面两个问题 http状态值422,貌似已经在框架里面写死了。我想通过捕获验证异常的形式返回自定义的json到前端,这个能实现吗? <?php namespace App\Exceptions; use Illuminate\Validation\ValidationException; ... class Handler extends ExceptionHandler { ... public function render($request, Exception $e) { if ($request->ajax() || $request->wantsJson()) { $errors = []; if ($e instanceof ValidationException && $e->getResponse()) { try { $errors = json_decode($e->getResponse()->getContent(), true); } catch (\Exception $ex) { $errors = $e->getResponse()->getContent(); } } return response()->json([ 'message' => empty($errors) ? (empty($e->getMessage()) ? '出错了' : $e->getMessage()) : implode(',', array_first($errors)), 'status_code' => $e->getStatusCode(), 'errors' => $errors ]); } ... } } 利用jquery的ajax方法在error的时候还是拿不到格式化成json对象的的返回数据,只能拿到一个字符串形式的json $.ajax({ ... dataType: "json", ...

潇湘沐

这是我用AJAX处理的返回数据 包括验证失败提示 $.ajax({ url : url, type : type, data : params, dataType : ret_type, timeout : 30000, async : false, // false:同步请求,true:异步请求 beforeSend : function () { console.log('正在请求...'); }, success : function (re_data, textStatus) { console.log('数据已返回'); responseObject = re_data; }, error : function (XMLHttpRequest, textStatus, errorThrow ) { console.log('AJAX 执行失败...'); console.log(XMLHttpRequest); console.log(textStatus); console.log(errorThrow); responseObject = {status:false,message:'请求失败'}; }, // 请求完成后回调函数 (请求成功或失败之后均调用) complete : function (XMLHttpRequest, textStatus) { layer.close(ajax_lod); var ret_code = XMLHttpRequest.status; var ret_json = XMLHttpRequest.responseJSON; var message = {}; for( var i in ret_json){ message[i] = ret_json[i][0]; } if( ret_code == 422 ){ for( var p in params){ if(message[p]){ responseObject = {status:false,message:message[p]};break; } } }else if(textStatus == 'error') { responseObject = {status:false,message:'请求失败'}; } console.log(message); } });
随时随地看视频慕课网APP
我要回答