代码之家  ›  专栏  ›  技术社区  ›  Fenn-CS

如何强制在Laravel中返回对Ajax请求的HTTP响应

  •  0
  • Fenn-CS  · 技术社区  · 7 年前

    我使用jquery快速创建单页体验 Laravel 模板。例如,只更新 #content 单击管理面板侧边栏上的按钮(链接)时网页的部分。

    我通常添加 success 和 error 对我请求的回调

            $.ajax({
                url: url,
                type: "POST",
                data: data,
                success:function(data){
            },
            error:function(xhr, status, error) {
                   //Error msg for Developers
                   $('body').html('');
                   $('body').prepend(xhr.responseText);
                   $('body').append('XHR :'+xhr);
                   $('body').append('STATUS :'+status);
                   $('body').append('ERROR :'+error);
                   // for users
                   // $('.infoMsg').html("OOPS SOMETHING BAD HAPPENED!");
                   // $('#infoModal').modal();
    
    
               }
           });
    

    在早期版本的 拉韦尔 例如 5.4 错误函数内的JS通常会像正常的HTTP响应(正常的网页)一样从后端呈现错误。当时,我猜想开发人员必须有意识地了解想要发送回的响应的类型,默认值是http。因此,如果后端出现错误,我会看到类似这样的情况(尽管这个是 5.7 )

    enter image description here

    所以这里的问题是什么?我想这里的问题是5.6以上, 拉韦尔 能够检测请求类型并根据请求类型以适当的格式发送响应。在本例中,它返回我的Ajax请求的JSON响应。所以现在当后端出现错误时,我会看到类似的情况

    enter image description here

    错误以如此混乱的方式显示会使我更难调试甚至理解错误!我知道让JSON以更好的方式出现是可能的,但是我想知道我是否有可能(并且实际上是一个好的解决方案)只需要 拉韦尔 是否返回HTTP响应(与以前版本中的类似)?

    使用时 GET 请求,如果在访问类似的路由时从后端获取并出错 list/products 例如,调试的一个简单方法就是从地址栏访问URL并直接获取HTTP格式的错误,但是使用 POST 请不要这样。这不是真正的“编程错误”或其他什么,而是找到一种调试Ajax问题的方便方法 拉韦尔 . 我想得到我的“良好的老拉拉维尔行为”谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Travis Britz    7 年前

    如果您所追求的只是调试异常的一种方便方法,我建议您 https://github.com/barryvdh/laravel-debugbar

    如果你 真的? 如果想从第一个屏幕截图中强制执行所有Ajax异常的“whoops”错误响应,可以替换 \App\Exceptions\Handler::render 方法中的代码 parent class ,更改此:

    return $request->expectsJson()
                        ? $this->prepareJsonResponse($request, $e)
                        : $this->prepareResponse($request, $e);
    

    对此:

    return $this->prepareResponse($request, $e);