更改页面而不刷新 – Laravel / Ajax

我一直在寻找一段时间没有得到我的问题的答案,但没有任何运气。

我正在尝试以点击链接的方式复制Soundcloud的导航结构,它将重定向页面而不使用Ajax / jQuery刷新,但不会重复内容,如果用户刷新,页面仍然存在看起来正常。

我遇到的问题是,我有一个扩展所有视图的主模板,所以当我打电话来浏览页面时,它会复制div中的页面我也在推动它。 这导致从主模板拉出两个标题/侧边栏等。

我还试图让其工作的另一件事是,如果我从视图中删除主模板,它将不会显示内容 – 但是说它确实如此,它将没有样式所以如果我是直接去那个页面,它会加载没有样式等。

这是正确运行页面的工作jQuery:

JQ

$(".main-nav li a").click(function(e) { e.preventDefault(); var href = $(this).attr("href"); $(".content-container").load(href); }); 

我希望这是有道理的,如果需要更多信息,我会尽力提供它!

太感谢了!

马特

编辑 –

这仍然是活跃的。 我已经做了一些更多的挖掘,并想到了另一种方式,人们可能会更多的光。 如果我在视图上包装扩展主模板,例如:

 if(!$request->ajax()) @extends('master') @endif 

那么只有在通过ajax请求页面时才会在该视图上显示主模板,对吧? 我不确定这是否是正确的方法,但值得一试。

像往常一样,非常感谢任何帮助!

尝试使用jQuery插件pjax 。 使用此插件,您可以使用ajax导航创建任何网站。

对于您要实现的目标,您需要的不仅仅是jQuery和Ajax。 您需要一个合适的JavaScript框架和一些模板。

我可以给你一些想法。

假设您的主布局看起来像这样:

   My website   
header
@yield('content')
footer

对于每个页面,您必须构建两个视图,一个包含应该放在“内容”部分中的内容,另一个包含扩展主布局的前一个视图,如下所示:

 @extends(layouts.master) @section('content') include partial here @endsection 

然后在Controller中,当请求来自Ajax时仅返回部分,而在请求正常时发送整页。

 Class MyController extends Controller{ public function action1(Request $request){ // code here return ($request->ajax() ? view('partial') : view('fullpage')); } } 

假设只有类“.ajax”的链接不应该刷新页面,你可以使用jquery函数“$ .get”来返回新的html。

 $("body").on('click','.ajax',function(){ var url = this.href; $.get(url, function(data){ $("#page-main").html(data); //history manipulation here }); return false; }); 

当然,您需要使用History API来更新url。

希望它有点帮助。

我通过在页面通过ajax加载时不需要显示的部分使用@if(!Request::ajax())来修复此问题。