为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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",
        ...
查看完整回答
反对 回复 2019-03-18
?
潇湘沐

TA贡献1816条经验 获得超6个赞

这是我用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);

        }
    });
查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 1110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信