2016-05-31 59 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

好了,現在我明白你的意思了。問題是完全不同的,但我很快就會更新這個話題。 –