Laravel 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,无缓存,无店铺
请让我知道球员,如果你知道解决这个问题的更好方法。
答
尝试处理后的验证请求:
public function handle($request, Closure $next)
{
if ($request->ajax()) {
return response()->json($response->getOriginalContent(), $response->status());
}
return $next($request);
}
这怎么不是我做了什么不同? –
中间件有两种类型:1.请求之前调用的中间件到达控制器。 2.请求后调用的中间件到达控制器。因此,在句柄方法中立即调用'$ next($ request);'就是应用中间件。 – manix
好了,现在我明白你的意思了。问题是完全不同的,但我很快就会更新这个话题。 –