2014-01-21 18 views
0

背景:我正在構建一個網站,當點擊各種<a>元素並且該功能正在工作時,它使用pjax從html片段加載容器的內容。PHP使PJAX與刷新按鈕一起工作?

問題:當我嘗試刷新通過pjax加載內容的頁面時,刷新的頁面只包含HTML片段。我理解PHP可能會在這裏發揮作用,我已經試過包含此代碼fragment.php文件替換我fragment.html文件之一:

<?php $headers = getallheaders(); 
if($headers['X-PJAX'] == 'true'): 
?><p> 
This text appears when page is reached by clicking a pjax link 
</p> 
<?php 
else: ?> 
<h2>This text should appear when page is refreshed, and could include the full HTML so the page will render complete if it's refreshed</h2> 
<?php endif ?> 

然而,這種方法是行不通的(我得到了一個服務器端錯誤)。 PHP應該在哪裏尋求解決這個問題?

回答

1

在php < 5.4 getallheaders方法並沒有用於工作,除非PHP作爲Apache模塊安裝,這可能是您的500錯誤的原因。

也許你可以試試:

<?php if(isset($_SERVER['HTTP_X_PJAX']) && $_SERVER['HTTP_X_PJAX'] == 'true'): ?> 

This text appears when page is reached by clicking a pjax link 

<?php else: ?> 

<h2>This text should appear when page is refreshed, and could include the full HTML so the page will render complete if it's refreshed</h2> 

<?php endif; ?> 

編輯:或者它看起來像你忘了 「;」在endif之後,這也可能是PHP錯誤的罪魁禍首。對於PJAX本身,通常PJAX假定服務器發送了HTTP_X_PJAX頭,它將只返回部分/片段內容,而如果頭被排除(即,如果頁面是直接加載的,例如通過一個刷新),那麼應該輸出整個內容。也就是說,一些PJAX庫(例如PJAX-Standalone,只要啓用了smartload)提供工具而不需要進行任何服務器端更改,即。他們會自動從完全呈現的頁面中提取「部分」內容,如果這是返回給他們的內容。

如果是這種情況,那麼總是比較安全,以避免總是返回整頁內容。據我所知,目前尚不支持主jQuery PJAX庫(https://github.com/defunkt/jquery-pjax),雖然包括獨立分拆(http://github.com/thybag/PJAX-Standalone)。我相信turbo鏈接也包含此功能(https://github.com/rails/turbolinks

披露:我是獨立版本的作者,所以對任何意外偏見都道歉。