我无法终生让Pjax与Laravel合作。我已经尝试了所有方法,但是刀片模板正在拧紧它。当我不使用刀片模板时,就可以使用它。
发生的情况是,加载了AJAX页面,然后不幸的是,重定向到了相同的确切URL。因此页面加载了两次。
我不知道如何修改刀片模板引擎以适应Pjax并抑制此第二页负载。有人有任何线索吗?
您如何扩展布局?本质上,您需要两种布局才能使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
覆盖该变量。
原始海报在这里。此多重加载问题是由Homestead / vagrant运行缓慢引起的。如果将PJAX上的timeout
选项设置为3500
(ms),则不会遇到此问题。
对于那些担心3.5秒页面加载缓慢并且使PJAX无效的人,请注意,在生产服务器上,即使是EC2微型实例,您的Laravel应用加载时间也将是Vagrant加载时间的1/10。在350
ms范围内,使用PJAX默认650
ms超时不会有问题。
您可以使用此代码
$(document).pjax('a', '#pjax-container',{
timeout : 10000,
fragment : ".root"
});
timeout:ajax超时(以毫秒为单位,在此之后强制进行完全刷新)
fragment:要从ajax响应中提取的片段的CSS选择器