2016-05-31 60 views
5

每当我去回顾历史上我的Laravel网站花括号,我看到的反应是这样的:Laravel 5和怪异的错误:上回

{} 

当我往前走我之前在那里,它也显示了这些大括号。

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

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

X-要求 - 由于: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()); 
    } 
} 

我在做什么错?


UPDATE

我发现对于Cache-Control响应头部约no-store值。它可以防止Chrome在点击后退按钮时使用缓存。我创建了一个中间件设置Cache-Control这样的:

的Cache-Control:私人,最大年龄= 0,无缓存,无店铺

请让我知道球员,如果你知道解决这个问题的更好方法。

回答

0

尝试处理后的验证请求:

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

    return $next($request);   
} 
+0

这怎么不是我做了什么不同? –

+0

中间件有两种类型:1.请求之前调用的中间件到达控制器。 2.请求后调用的中间件到达控制器。因此,在句柄方法中立即调用'$ next($ request);'就是应用中间件。 – manix

+0

好了,现在我明白你的意思了。问题是完全不同的,但我很快就会更新这个话题。 –