Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在不刷新的情况下更改页面-Laravel/Ajax_Jquery_Ajax_Laravel - Fatal编程技术网

Jquery 在不刷新的情况下更改页面-Laravel/Ajax

Jquery 在不刷新的情况下更改页面-Laravel/Ajax,jquery,ajax,laravel,Jquery,Ajax,Laravel,我已经四处寻找了一段时间,没有找到我问题的答案,但是没有任何运气 我正在有效地尝试复制Soundcloud的导航结构,您可以点击链接,它将重定向页面而不使用Ajax/jQuery刷新,但不会复制内容,如果用户刷新,页面仍然正常 我的问题是,我有一个主模板,它在所有视图上都进行了扩展,所以当我调用拉取页面时,它会在div中复制页面,我也在推送它。这将导致从主模板中拉出两个标题/侧栏等 另一件事,我也试图让它工作的是,如果我从视图中删除主模板,它将不会显示内容-但说它有,它不会有样式,所以如果我直接

我已经四处寻找了一段时间,没有找到我问题的答案,但是没有任何运气

我正在有效地尝试复制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和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请求页面,然后显示适当的内容会更容易吗?不知道这将如何工作,但在我的脑海里似乎是合乎逻辑的哈哈。再次感谢!是的,或者您可以只创建部分和“常规”视图,在其中动态包含每个部分。