我不能爲了我的生活讓Pjax與Laravel一起工作。我嘗試了一切,但刀片模板正在搞砸了。當我不使用刀片模板時,我可以使它工作。Laravel和PJAX
發生什麼是AJAX頁面加載,然後不幸的是,有一個重定向到同一個確切的URL。所以頁面加載兩次。
我不知道如何修改刀片模板引擎以適應Pjax並抑制第二頁加載。任何人有任何線索?
我不能爲了我的生活讓Pjax與Laravel一起工作。我嘗試了一切,但刀片模板正在搞砸了。當我不使用刀片模板時,我可以使它工作。Laravel和PJAX
發生什麼是AJAX頁面加載,然後不幸的是,有一個重定向到同一個確切的URL。所以頁面加載兩次。
我不知道如何修改刀片模板引擎以適應Pjax並抑制第二頁加載。任何人有任何線索?
原始海報在這裏。這種多次加載問題是由宅基地/流浪者緩慢造成的。如果您將PJAX上的timeout
選項設置爲3500
(ms),那麼您將不會遇到此問題。
對於那些擔心3.5秒的頁面加載速度慢並且使PJAX無用的請注意,在生產服務器上,即使是EC2的微型實例,Laravel應用加載時間將是Vagrant的1/10,將在350
毫秒範圍內,並且使用PJAX和其默認的650
毫秒超時將沒有問題。
你如何擴展你的佈局?您基本上需要兩種佈局才能使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
)
resources/views/layouts/main.blad e.php
<html>
<body>
@yield('content')
</body>
</html>
資源/視圖/佈局/ pjax.blade.php
@yield('content')
查看
@extends($layout)
@section('content')
Some html content
@endsection
基本上AppServiceProvider
你告訴每一個觀點$layout
var應該默認爲layouts.main
。在Pjax中間件中,您改爲用layouts.pjax
覆蓋該變量。
真的很棒的答案@亞歷克斯。我遇到的問題圍繞着'650ms'的默認pjax響應超時。有了Codeigniter,我從來沒有碰到過這種響應超時,但很遺憾,Laravel對我的大多數應用程序鏈接都是這樣。該應用程序沒有做任何特殊的事情,只是像許多其他應用程序訪問數據庫,所以不知道可以做什麼。將超時延長到「3000ms」確實解決了這個問題,但是這打破了PJAX的目的。 –
這似乎有點......關閉!你有沒有嘗試用[Laravel Debugbar](https://github.com/barryvdh/laravel-debugbar)這樣的東西來分析你的應用,找出瓶頸在哪裏? – Alex
這是我的個人資料:'啓動(493.21ms),應用程序(561.17ms),應用程序(26.3ms)''。似乎有點長,對吧? –