Jquery 在不刷新的情况下更改页面-Laravel/Ajax
我已经四处寻找了一段时间,没有找到我问题的答案,但是没有任何运气 我正在有效地尝试复制Soundcloud的导航结构,您可以点击链接,它将重定向页面而不使用Ajax/jQuery刷新,但不会复制内容,如果用户刷新,页面仍然正常 我的问题是,我有一个主模板,它在所有视图上都进行了扩展,所以当我调用拉取页面时,它会在div中复制页面,我也在推送它。这将导致从主模板中拉出两个标题/侧栏等 另一件事,我也试图让它工作的是,如果我从视图中删除主模板,它将不会显示内容-但说它有,它不会有样式,所以如果我直接转到该页面,它将加载没有样式等 这是正确浏览页面的工作jQuery: jQJquery 在不刷新的情况下更改页面-Laravel/Ajax,jquery,ajax,laravel,Jquery,Ajax,Laravel,我已经四处寻找了一段时间,没有找到我问题的答案,但是没有任何运气 我正在有效地尝试复制Soundcloud的导航结构,您可以点击链接,它将重定向页面而不使用Ajax/jQuery刷新,但不会复制内容,如果用户刷新,页面仍然正常 我的问题是,我有一个主模板,它在所有视图上都进行了扩展,所以当我调用拉取页面时,它会在div中复制页面,我也在推送它。这将导致从主模板中拉出两个标题/侧栏等 另一件事,我也试图让它工作的是,如果我从视图中删除主模板,它将不会显示内容-但说它有,它不会有样式,所以如果我直接
$(".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和Ajax。你需要一个合适的JavaScript框架和一些模板。尝试使用jQuery插件。有了这个插件,你可以用ajax导航创建任何网站。我可以给你一些想法 假设您的主布局如下所示:
<html>
<head>
<title>My website</title>
</head>
<body>
<header>
header
</header>
<main id="page-main">
@yield('content')
</main>
<footer>
footer
</footer>
</body>
</html>
@extends(layouts.master)
@section('content')
include partial here
@endsection
然后,在控制器中,当请求来自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;
});
当然,您需要使用更新url
希望能有所帮助。我通过在通过ajax加载页面时不需要显示的部分上使用
@if(!Request::ajax())
解决了这个问题。您好,感谢您的回复,很抱歉回复太晚。但是,每一页有两个视图不是很低效吗?考虑到我的网络应用程序将相对较大。指定是否通过ajax/jq通过Laravel请求页面,然后显示适当的内容会更容易吗?不知道这将如何工作,但在我的脑海里似乎是合乎逻辑的哈哈。再次感谢!是的,或者您可以只创建部分和“常规”视图,在其中动态包含每个部分。