Laravel和PJAX

问题描述 投票:0回答:3

我无法终生让Pjax与Laravel合作。我已经尝试了所有方法,但是刀片模板正在拧紧它。当我不使用刀片模板时,就可以使用它。

发生的情况是,加载了AJAX页面,然后不幸的是,重定向到了相同的确切URL。因此页面加载了两次。

我不知道如何修改刀片模板引擎以适应Pjax并抑制此第二页负载。有人有任何线索吗?

php ajax laravel pjax
3个回答
3
投票

您如何扩展布局?本质上,您需要两种布局才能使PJAX正常工作-一种具有所有脚本的内容,而另一种则仅显示您请求的视图。

app / Providers / AppServiceProvider.php

public function boot() {
    view()->share('layout', 'layouts.main');
}

app / Middleware / PjaxCheck.php

public function handle($request, Closure $next)
{
    if ($request->pjax())
    {
        view()->share('layout', 'layouts.pjax');
    }

    return $next($request);
}

(不要忘记将其添加到您的Kernel

资源/视图/布局/main.blade.php

<html>
    <body>
        @yield('content')
    </body>
</html>

资源/视图/布局/pjax.blade.php

@yield('content')

查看

@extends($layout)
@section('content')
    Some html content
@endsection

基本上是在AppServiceProvider中,您要告诉每个视图$layout变量应默认为layouts.main。然后在Pjax中间件中,用layouts.pjax覆盖该变量。


1
投票

原始海报在这里。此多重加载问题是由Homestead / vagrant运行缓慢引起的。如果将PJAX上的timeout选项设置为3500(ms),则不会遇到此问题。

对于那些担心3.5秒页面加载缓慢并且使PJAX无效的人,请注意,在生产服务器上,即使是EC2微型实例,您的Laravel应用加载时间也将是Vagrant加载时间的1/10。在350 ms范围内,使用PJAX默认650 ms超时不会有问题。


0
投票

您可以使用此代码

$(document).pjax('a', '#pjax-container',{
    timeout : 10000,
    fragment : ".root"
});

timeout:ajax超时(以毫秒为单位,在此之后强制进行完全刷新)

fragment:要从ajax响应中提取的片段的CSS选择器

© www.soinside.com 2019 - 2024. All rights reserved.