Laravel 5 和奇怪的错误:后面的花括号
Posted
技术标签:
【中文标题】Laravel 5 和奇怪的错误:后面的花括号【英文标题】:Laravel 5 and weird bug: curly braces on back 【发布时间】:2016-09-30 02:23:26 【问题描述】:每当我在我的 Laravel 网站上回顾历史时,我看到的响应是这样的:
当我前进到之前的位置时,它也会显示那些大括号。
如果我在 Chrome 中使用禁用缓存选项启动开发人员工具,则不会出现此问题。返回的Content-Type
确实是application/json
。在 Firefox 中没有这样的问题。
这是因为我的中间件之一。我编写了 AjaxJson 中间件来将所有 Ajax 请求转换为 JSON 响应。奇怪的是,当我回顾历史时,谷歌浏览器会发出这个请求 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
,如下所示:
缓存控制:私有,max-age=0,无缓存,无存储
如果您知道解决此问题的更好方法,请告诉我。
【问题讨论】:
【参考方案1】:验证后尝试处理请求:
public function handle($request, Closure $next)
if ($request->ajax())
return response()->json($response->getOriginalContent(), $response->status());
return $next($request);
【讨论】:
这和我做的有什么不同? 中间件有两种类型: 1. 在请求到达控制器之前调用的中间件。 2. 请求到达控制器后调用的中间件。所以在handle方法中立即调用$next($request);
毕竟是应用中间件。
好吧,我明白你的意思了。不过问题是完全不同的,我会尽快更新这个主题。以上是关于Laravel 5 和奇怪的错误:后面的花括号的主要内容,如果未能解决你的问题,请参考以下文章
使用 Kotlin 的 RxJava 中的花括号和普通括号有啥区别
带 f 字符串的花括号 - ValueError:字符串格式说明符中不允许符号 [重复]