我正在使用laravel创建一个网页,并且主菜单页面的内容都加载了ajax。问题是,当我使用浏览器的后退按钮返回上一页时,浏览器不仅加载由ajax调用接收的内容,还加载整个页面。所以我得到两个页眉和两个页脚。
这是我的代码:
base.blade.php:
<html>
<body>
//菜单列表
...
<div class="main">
@yield('main')
</div>
</body>
</html>
page.blade.php:
@extends('base')
@section('main')
<div class="main">
My page content.
</div>
@stop
//用户单击菜单链接并调用此脚本
script.js:
$(".menu_list").on("click", "a.menu_page", function(e) {
// get some variables
$.ajax({
type: "GET",
url: url,
dataType: "html",
success: function (result) {
// get only div.main content from result
var mainContent = $(result).find("div.main").html();
// and load this data
$("div.main").html(mainContent);
} ...
我还尝试不返回完整页面数据,而仅返回控制器中的主要部分:
controller.php:
...
if(Request::ajax()) {
return view('page')->renderSections()['main']; }
在script.js中:
success: function (result) {
$("div.main").html(result);
但没有任何作用。
所以我不明白为什么浏览器返回上一页后将整个页面加载到@yield节中,尽管控制器只返回了部分页面内容。