目前集成jquery的pjax,将尽我所能解释。我有它在第一个视图内工作,但是当从地址栏直接访问URL地址时,我得到了没有@extends('layout.main')
的视图。
下面是我的设置:
路由,一条路由用于retailers.index
视图,另一条路由用于我的GET参数和retailers.stores
视图。
Route::get('retailers', array(
'as' => 'retailers',
'uses' => 'SiteController@retailers'));
Route::get('retailers/{city}', array(
'as' => 'find-retailers',
'uses' => 'SiteController@getRetailers'));
控制器:
public function retailers() {
$listings = DB::table('retailers_listings')
->orderBy('counter', 'desc')
->groupBy('country')
->get();
return View::make('retailers.index')
->with('retailers_listings', $listings)
}
public function getRetailers($city) {
$locations = DB::table('retailers_listings')
->orderBy('country', 'asc')
->Where('city', $city)
->get();
return View::make('retailers.stores')
->with('retailers_listings', $locations);
}
href with pjax and URL route to retailers.stores
view - using find-retailers
<a data-pjax href="{{ URL::route('find-retailers', array('city' => $string)) }}">
{{ $string }}
</a>
内联JS $(document).pjax('[data-pjax] a, a[data-pjax]', '#pjax-container')
如果我加载/零售商(索引)一切工作,如果我按下链接,它将加载store.retailers
视图内的<div id="pjax-container"></div>
和URL将更改为零售商/{国家}。如果我直接从URL地址栏加载,它只会加载没有@extends('layout.main')
的视图,因为我没有在retailers.stores
视图中调用它,因为我加载了零售商。
基本上可以工作,但不直接加载地址栏
您不应该使用@if(!Request::ajax())
来确定请求是否通过PJAX。
PJAX将提供特定的自定义标头(HTTP_X_PJAX
和HTTP_X_PJAX_CONTAINER
),您应该使用它们来确定请求所请求的内容。
@if($request->server->get('HTTP_X_PJAX'))
为了更简单的解决方案…
您应该看看这个使用PJAX的laravel包:
https://github.com/simonstamm/laravel-pjax它正确地使用了上面提到的头,甚至会自动为请求返回视图的适当部分。
Laravel不知道你在使用PJAX之类的东西。
你应该在每条路由中包含@extends('layout.main')
。为了使用PJAX,您应该使layout.main
只在Request::ajax()
为false时吐出站点布局。