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,無緩存,無店鋪
請讓我知道球員,如果你知道解決這個問題的更好方法。
這怎麼不是我做了什麼不同? –
中間件有兩種類型:1.請求之前調用的中間件到達控制器。 2.請求後調用的中間件到達控制器。因此,在句柄方法中立即調用'$ next($ request);'就是應用中間件。 – manix
好了,現在我明白你的意思了。問題是完全不同的,但我很快就會更新這個話題。 –