1

我的 pjax 不工作,因为我看到时间变化..

你能发现我的代码有问题吗?

<html><head>
<script src="jquery.js"></script>
<script src="jquery.cookie.js"></script>
<script src="jquery.pjax.js"></script>
<script type="text/javascript">
$('a[data-pjax]').pjax()
</script>
</head><body>
<?php
$header = "this is first part
<br/> <a href='pjax2.php' data-pjax='main'>GO</a>";
$date = date("Y-m-d H:i:s");
$footer = "this is second part";
$headers = getallheaders();
if(($headers['X-PJAX'] == 'true')){
echo "<div id='main'>first change</div>";
}else{
echo "$header<br/>$date<br /><div id='main'>first page</div><br />$footer";
}
?>
</body></html>

最佳,MJ

4

1 回答 1

4

编辑:主要问题是您尝试使用尖端浏览器功能而没有掌握网页的基本调试。

你用 php 解决了这个错误getallheaders(),所以这对你来说应该很容易。

第一步:加载http://www.bluereservations.com/pjax.php,打开浏览器控制台,刷新页面,查看控制台消息。

它报告一个错误,即$ is not defined. 这表明jquery没有成功加载。

第 2 步:加载http://www.bluereservations.com/jquery.js

一个谜团解开了。

在解决了页面的所有明显问题之后,再看看更模糊的东西。对于将涉及检查网络资源、http 请求和响应标头等的 pjax。

如果您使用 Firebug for Firefox,请阅读http://getfirebug.com/wiki/index.php/Net_Panel了解详细信息。对于 pjax,您需要打开该persist选项以防 pjax 失败。

以下内容可能会解决您的测试页的其他问题...

响应X-PJAX请求时,您只发送主要内容,而不是整个页面。对于您的测试用例,例如

<?php $headers = getallheaders();
      if($headers['X-PJAX'] == 'true'): ?>
first change
<?php else: ?>
<html>
<head>
<script src="jquery.js"></script>
<script src="jquery.cookie.js"></script>
<script src="jquery.pjax.js"></script>
<script type="text/javascript">
$(function() { $('a[data-pjax]').pjax(); });
</script>
</head>
<body>
<?php
  $header = "this is first part
    <br/> <a href='pjax2.php' data-pjax='main'>GO</a>";
  $date = date("Y-m-d H:i:s");
  $footer = "this is second part";
  echo "$header<br/>$date<br /><div id='main'>first page</div><br />$footer";
?>
</body>
</html>
<?php endif; ?>

jquery-pjax 确实允许您发送整个文件以响应X-PJAX请求。在文档中查找该fragment选项。

就个人而言, HTMLDecor是一种更容易获得免费pushState支持的方法,但我有偏见。

于 2012-04-28T05:10:28.863 回答