PHP使PJAX与刷新按钮一起工作?

时间:2014-01-21 22:43:36

标签: php ajax pjax

背景:我正在构建一个网站,当点击各种<a>元素时,使用pjax从html片段加载容器的内容,并且该功能正在运行。

问题:当我尝试刷新通过pjax加载内容的页面时,刷新的页面只包含HTML片段。我理解PHP可能会在这里发挥作用,并且我尝试用包含此代码的fragment.html文件替换我的fragment.php文档之一:

<?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 个答案:

答案 0 :(得分:1)

在php&lt; 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

披露:我是独立版本的作者,因此对任何意外偏见表示道歉。