【问题标题】:How to force return an HTTP response to an AJAX request in laravel如何强制在 laravel 中对 AJAX 请求返回 HTTP 响应
【发布时间】:2019-02-11 04:25:57
【问题描述】:

我使用 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

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

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

在处理GET 请求时,如果在访问list/products 之类的路由时从后端获取并出错,调试的简单方法是从地址栏访问url 并在HTTP 中获取错误直接格式化,但是在处理POST 请求时,情况并非如此。这不是真正的“编程错误”或其他东西,而是找到一种方便的方法来调试 Laravel 的 AJAX 问题。我想得到我的“良好的旧 laravel 行为”谢谢!

【问题讨论】:

    标签: jquery ajax laravel laravel-5.7


    【解决方案1】:

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

    如果您真的想要强制从您的第一个屏幕截图中针对所有 ajax 异常做出漂亮的“哎呀”错误响应,您可以将您的 \App\Exceptions\Handler::render 方法替换为其 parent class 中的代码,更改这个:

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

    到这里:

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

    【讨论】:

    • 谢谢,乍一看似乎是一个可行的解决方案。让我试一试并将其标记为已接受的答案。
    • public function render($request, Exception $exception) { //return parent::render($request, $exception); return $this->prepareResponse($request, $exception); } 酷。谢谢。
    猜你喜欢
    • 2010-09-21
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多