Laravel 5和奇怪的虫子:背上的花括号

时间:2016-05-31 22:08:44

标签: php json ajax laravel-5

每当我在Laravel网站上回顾历史时,我看到的回答是:

{}

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

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

这是因为我的一个中间件。我编写了AjaxJson中间件来将所有Ajax请求转换为JSON响应。奇怪的是,当我回到历史时,Google Chrome会向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,如下所示:

  

Cache-Control:private,max-age = 0,no-cache,no-store

如果你知道解决这个问题的更好方法,请告诉我们。

1 个答案:

答案 0 :(得分:0)

尝试在验证后处理请求:

public function handle($request, Closure $next)
{
    if ($request->ajax()) {
        return response()->json($response->getOriginalContent(), $response->status());
    }

    return $next($request);        
}