Laravel中Office页面返回按钮点击后不刷新问题求助
解决Office页面返回按钮不刷新的问题
看起来你遇到的问题是浏览器缓存导致的,咱们来一步步分析和解决:
问题根源对比
- Building页面的返回按钮用的是
{{route('index')}},这是直接发起一个新的GET请求到服务器,服务器会返回最新的页面数据,所以能看到更新后的内容; - Office页面用的是
javascript:history.back(),这个方法是从浏览器的本地历史缓存里加载上一页,不会重新向服务器请求数据,所以新建Office后返回,看到的还是缓存的旧页面。
解决方案(推荐第一种)
方案1:替换history.back()为路由跳转
既然Office是属于某个Building的,返回时直接跳转到对应的Building详情页(而不是依赖浏览器历史),这样会强制拉取服务器最新数据。
首先给你的Building详情路由加个名称(方便生成链接):
// 在routes/web.php里修改这条路由,加上name属性 Route::get('building/{id}', 'PageController@show')->name('building.show');
然后修改Office页面的返回按钮代码,传入当前Office所属的Building ID:
<!-- 假设你在Office页面能拿到$buildingId变量,比如从创建Office时的路由参数获取 --> <a href="{{ route('building.show', $buildingId) }}" class="btn btn-default">Back</a>
这样点击返回时,会重新请求Building详情页,服务器会返回包含新创建Office的最新数据,页面自然就刷新了。
方案2:禁用页面缓存(如果一定要用history.back())
如果你坚持要用history.back(),可以在Building详情页(也就是返回后看到的页面)设置响应头,禁止浏览器缓存该页面。
修改PageController的show方法:
public function show($id) { $building = Building::findOrFail($id); // 假设你在这里获取该Building下的所有Office $offices = $building->offices; return response()->view('pages.show', compact('building', 'offices')) ->header('Cache-Control', 'no-cache, no-store, must-revalidate') ->header('Pragma', 'no-cache') ->header('Expires', '0'); }
或者在Building详情页的<head>标签里添加meta标签来禁用缓存:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />
这样浏览器就不会缓存这个页面,每次history.back()都会重新从服务器加载最新内容。
总结
优先推荐方案1,因为它更符合Laravel的路由设计规范,也避免了缓存带来的各种潜在问题;方案2适合必须保留history.back()逻辑的场景。
内容的提问来源于stack exchange,提问作者TeamPlar Jarj
相关产品推荐
相关产品推荐

