5

我注册了GET一条路线laravel.dev/test。路由的相应控制器将区分请求是否为 ajax。

当我laravel.dev/test在浏览器上键入时,Laravel 检测到它不是 ajax 请求并用于return View::make()生成页面。然后页面上的代码向LaravelBackbone.js发出一个 ajax 请求并返回一个 JSON。laravel.dev/testreturn Response::json

一切都很好,直到我尝试离开页面然后使用浏览器按钮导航回laravel.dev/test它打印出 json 作为响应,这不是我所期望的,因为我没有发出 ajax 请求。

4

3 回答 3

2

绝对是缓存问题。只是为了尝试获得一些结果,将其添加到您的控制器(ajax 和非 ajax)以强制禁用缓存:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

并查看 chrome 是否仍从后退按钮上的缓存中获取。

于 2013-07-05T12:32:57.230 回答
2

这不是 laravel 或骨干网,而是chrome 问题也检查一下

对我有用的解决方案是把

return Response::json($this->data)->header("Vary", "Accept");

祝你好运!

于 2015-05-17T12:55:34.877 回答
1

这是在 Laravel 5.1 中,但该原则也适用于所有以前的版本。

我处理它的方式是两条路线指向同一个方法,但一条以.json扩展名结尾:

get('items', ['as' => 'items', 'uses' => 'ItemsController@index']);
get('items.json', ['as' => 'items', 'uses' => 'ItemsController@index']);

然后在我的index()方法中:

$data = []; // your collection

if ($this->request->ajax()) {
    return response()->json($data); // replace with actual JSON data
}

return view('items.index', compact('data')); 

这允许 JSON 响应的专用 URL,使用相同的方法和数据,并且永远不会干扰我的后退按钮。

于 2015-08-12T21:10:49.383 回答