2013-10-12 105 views
2

我想安裝pjax,但它不起作用。每當我點擊一個pjax鏈接的URL得到domain.com/foo(沒有html內容是變化)的變化,然後它更改爲domain.com/#,然後正常重定向到domain.com/foo。爲什麼?pjax不工作與laravel

我這是怎麼引發pjax: $(document).pjax('a[data-pjax]', '#wrapper');

在我的控制器我有這樣的:

public function getIndex() { 
    $posts = $this->loginOptions(); 

    $this->layout->title = 'My title';  
    $content = View::make('foo.bar') 
     ->with('title', $this->layout->title) 
     ->with('posts', []); 

    if (Request::header('X-PJAX')) 
     return $content; 
    else 
     $this->layout->content = $content; 
} 

我的HTML(第一,我點擊鏈接頁面)看起來是這樣的:

<DOCTYPE html> 
<head></head> 
<html> 
    <body> 
    <div id='wrapper'> 
     <a data-pjax href='foo'>Foobar</a> 
    </div> 
    <script src='http://code.jquery.com/jquery-2.0.0.min.js'></script> 
    <script src='jquery.pjax.js'></script> 
    <script src='script.js'></script> 
    </body> 
</html> 

如果我用X-PJAX頭部運行標準ajax調用,我得到正確的html(這意味着我的If正在工作),但url不會改變,這就是爲什麼我想要使用pjax。

$.ajax({ 
    url: '/login', 
    type: 'get', 
    beforeSend: function(xhr){ 
     xhr.setRequestHeader('X-PJAX', true); 
     xhr.setRequestHeader('X-PJAX-Container', '#wrapper') 
    }, 
    success: function(resp) { $('#wrapper').html(resp); } 
}) 
+0

你看過https://github.com/vtalbot/pjax了嗎? –

+0

我測試過了,並且https://github.com/simonstamm/laravel-pjax和兩者都有相同的問題。 – Marwelln

回答

1

我放棄了pjax。我現在正在使用history.js

的Javascript:

History.Adapter.bind(window,'statechange',function(){ 
    var State = History.getState(); 
    $.ajax({ 
     url: State.url, 
     type: 'get', 
     beforeSend: function(xhr){ 
      xhr.setRequestHeader('X-PJAX', true); 
     }, 
     success: function(resp, status, xhr) { 
      document.title = xhr.getResponseHeader('Page-Title'); 
      $('#wrapper').html(resp); 
     } 
    }); 
}); 

$(document).on('click', 'a[data-pjax]', function(e){ 
    e.preventDefault(); 

    var self = $(this); 

    History.pushState(null, 'Loading page...', self.attr('href')); 
}); 

PHP(控制器):

public function getIndex() { 
    $this->layout->title = 'My Title';  
    $content = View::make('my.view') 
     ->with('title', $this->layout->title) 
     ->with('posts', []); 

    if (Request::header('X-PJAX')) { 
     return Response::make($content) 
      ->header('Page-Title', $this->layout->title); 
    } else 
     $this->layout->content = $content; 
} 
3

你是如此接近:d

JS:

$(document).pjax('a[data-pjax]', '#wrapper', { fragment: '#wrapper}); 

到#的變化與隨之而來的重載情況是因爲pjax作品,但沒有找到一個ID爲#wrapper的HTML元素,所以它會進入超時並重新加載頁面。這種行爲是需要的,因爲舊的瀏覽器(沒有pushstate/popstate/ajax支持)然後加載像頁面一樣的所有鏈接是靜態的。

嘗試修改此:

if (Request::header('X-PJAX')) 
     echo '<div id="wrapper"> pjaxxx </div>'; 
    else 
     $this->layout->content = $content; 

我知道你已經解決了使用history.js這個問題,但pjax解決了愚蠢hashbanging和安靜使用方便一旦實施。

希望你還是讀了這個,乾杯!