每当我在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
如果你知道解决这个问题的更好方法,请告诉我们。
答案 0 :(得分:0)
尝试在验证后处理请求:
public function handle($request, Closure $next)
{
if ($request->ajax()) {
return response()->json($response->getOriginalContent(), $response->status());
}
return $next($request);
}