Laravel 5 和奇怪的错误:后面的花括号

Posted

技术标签:

【中文标题】Laravel 5 和奇怪的错误:后面的花括号【英文标题】:Laravel 5 and weird bug: curly braces on back 【发布时间】:2016-09-30 02:23:26 【问题描述】:

每当我在我的 Laravel 网站上回顾历史时,我看到的响应是这样的:


当我前进到之前的位置时,它也会显示那些大括号。

如果我在 Chrome 中使用禁用缓存选项启动开发人员工具,则不会出现此问题。返回的Content-Type 确实是application/json。在 Firefox 中没有这样的问题。

这是因为我的中间件之一。我编写了 AjaxJson 中间件来将所有 Ajax 请求转换为 JSON 响应。奇怪的是,当我回顾历史时,谷歌浏览器会发出这个请求 Ajax。它包含此标头:

X-Requested-With: XMLHttpRequest

因此$request->ajax() 返回true

这是我的中间件:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Response;

class AjaxJson

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    
        $response = $next($request);

        if (!$request->ajax()) 
            return $response;
        

        if (!$response instanceof Response) 
            return $response;
        

        return response()->json($response->getOriginalContent(), $response->status());
    

我做错了什么?


更新

我发现了no-store 响应标头的Cache-Control 值。它可以防止 Chrome 在单击后退按钮时使用缓存。我创建了一个中间件来设置Cache-Control,如下所示:

缓存控制:私有,max-age=0,无缓存,无存储

如果您知道解决此问题的更好方法,请告诉我。

【问题讨论】:

【参考方案1】:

验证后尝试处理请求:

public function handle($request, Closure $next)

    if ($request->ajax()) 
        return response()->json($response->getOriginalContent(), $response->status());
    

    return $next($request);        

【讨论】:

这和我做的有什么不同? 中间件有两种类型: 1. 在请求到达控制器之前调用的中间件。 2. 请求到达控制器后调用的中间件。所以在handle方法中立即调用$next($request);毕竟是应用中间件。 好吧,我明白你的意思了。不过问题是完全不同的,我会尽快更新这个主题。

以上是关于Laravel 5 和奇怪的错误:后面的花括号的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的花括号表示法

用sed替换换行符分隔的花括号

使用 Kotlin 的 RxJava 中的花括号和普通括号有啥区别

带 f 字符串的花括号 - ValueError:字符串格式说明符中不允许符号 [重复]

栈练习之Example005-检查一个程序中的花括号方括号和圆括号是否配对

Laravel 邮件奇怪的超时错误