背景:我正在构建一个网站,当点击各种<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应该在哪里尝试解决这个问题吗?
答案 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)
披露:我是独立版本的作者,因此对任何意外偏见表示道歉。