如何在laravel

时间:2019-02-10 19:38:43

标签: jquery ajax laravel laravel-5.7

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

我通常会这样向我的请求添加successerror回调

        $.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();


           }
       });

Laravel的早期版本中,例如5.4,错误函数中的JS通常像正常的HTTP响应(正常的网页)一样,从后端呈现错误。当时,我的猜测是开发人员必须故意想要返回的响应类型,默认响应是HTTP。因此,如果后端出现错误,我会看到类似这样的内容(尽管这个是5.7

enter image description here

那么这里是什么问题!我认为这里的问题是5.6或更高版本,Laravel能够检测请求的类型并根据请求类型以适当的格式发送响应。在这种情况下,它将为我的AJAX请求返回JSON响应。所以现在当后端出现错误时,我会看到类似的东西

enter image description here

以如此混乱的方式显示错误会使我更难以调试甚至无法理解错误!我知道可以以更好的方式显示JSON,但是我想知道是否有可能(而且实际上是一个很好的解决方案)使Laravel像以前的版本一样仅返回HTTP响应?

在处理GET请求时,例如,如果在访问诸如list/products之类的路由时从后端获取和出错,调试的一种简单方法就是从地址栏中访问url并获取直接以HTTP格式显示错误,但是在处理POST请求时不是这种情况。这实际上不是“编程错误”,而是找到一种方便的方法来Laravel调试AJAX问题。我想得到我的“好老的laravel行为”,谢谢!

1 个答案:

答案 0 :(得分:1)

如果您所需要的只是调试异常的便捷方法,我建议您使用https://github.com/barryvdh/laravel-debugbar

如果您真的想对所有ajax异常强制从第一张屏幕截图中强制执行漂亮的“ Whoops”错误响应,则可以将\App\Exceptions\Handler::render方法替换为其{{3 }},对此进行更改:

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

对此:

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