无论如何我都无法让Pjax与Laravel一起工作。我什么都试过了,就是刀刃的模板搞砸了。当我不使用刀片模板时,我可以让它工作。
发生的事情是AJAX页面加载,然后不幸的是,有一个重定向到相同的URL。因此,页面加载两次。
我不知道如何修改刀片模板引擎以适应Pjax并抑制这第二页加载。有人有什么线索吗?
你如何扩展你的布局?要使PJAX正常工作,基本上需要两种布局——一种包含所有脚本和诸如之类的东西,另一种只显示所请求的视图。
应用程序/供应商/AppServiceProvider.php
public function boot() {
view()->share('layout', 'layouts.main');
}
应用/中间件/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')
<<p> 视图/strong> @extends($layout)
@section('content')
Some html content
@endsection
基本上在AppServiceProvider
中,您告诉每个视图$layout
变量应该默认为layouts.main
。在Pjax中间件中,您可以使用layouts.pjax
来覆盖该变量。
原海报在这里。这个多重加载问题是由Homestead/vagrant速度慢引起的。如果将PJAX上的timeout
选项设置为3500
(ms),则不会遇到此问题。
对于那些担心3.5秒页面加载缓慢并使PJAX无用的人,请注意,在生产服务器上,即使是EC2微实例,你的Laravel应用程序加载时间将是它在Vagrant上的1/10,所以你将在350
毫秒范围内,使用PJAX默认的650
毫秒超时将没有问题。
可以使用以下代码
$(document).pjax('a', '#pjax-container',{
timeout : 10000,
fragment : ".root"
});
timeout: ajax超时时间(毫秒)
fragment:要从ajax响应中提取的片段的CSS选择器