我使用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();
}
});
在Laravel
的早期版本中,例如5.4
,错误函数中的JS通常像正常的HTTP响应(正常的网页)一样,从后端呈现错误。当时,我的猜测是开发人员必须故意想要返回的响应类型,默认响应是HTTP。因此,如果后端出现错误,我会看到类似这样的内容(尽管这个是5.7
)
那么这里是什么问题!我认为这里的问题是5.6或更高版本,Laravel
能够检测请求的类型并根据请求类型以适当的格式发送响应。在这种情况下,它将为我的AJAX请求返回JSON响应。所以现在当后端出现错误时,我会看到类似的东西
以如此混乱的方式显示错误会使我更难以调试甚至无法理解错误!我知道可以以更好的方式显示JSON,但是我想知道是否有可能(而且实际上是一个很好的解决方案)使Laravel
像以前的版本一样仅返回HTTP响应?
在处理GET
请求时,例如,如果在访问诸如list/products
之类的路由时从后端获取和出错,调试的一种简单方法就是从地址栏中访问url并获取直接以HTTP格式显示错误,但是在处理POST
请求时不是这种情况。这实际上不是“编程错误”,而是找到一种方便的方法来Laravel
调试AJAX问题。我想得到我的“好老的laravel行为”,谢谢!
答案 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);