jQuery pjax 简单入门
Pjax是ajax的升级版,怎么理解呢,当初学习ajax的时候讲了ajax的优缺点,其中一个缺点是破坏了浏览器的前进后退,因为ajax的请求不会留在历史记录中。pjax就不一样了,pjax被解释成ajax+pushState的封装,因为它把ajax的请求写入历史记录,并反映在地址栏,这样用户就能愉快地使用前进后退了。pjax有好几个实现方法,这里使用最常用的Jquery库,使用jquery.pjax.js。演示代码的服务器端使用PHP脚本语言。
<!DOCTYPE html>
<html>
<head>
<title>pjax</title>
<meta charset="utf-8"></head>
<body>
<h1>My Site</h1>
<div>
Go to <a href="demo.php">第一页</a>
</div>
<div id="container"></div>
<script src="../jquery-2.1.4.min.js"></script>
<script src="../jquery.pjax.js"></script>
<script type="text/javascript">$(document).pjax('a', '#container')</script>
</body>
</html>
demo.php
<?php echo "<div style='background:red;'>第一页</div>"; ?>
解释:$(document).pjax('a', '#container')其中a是触发元素,#container是装载pjax返回内容的容器
这种模式下除了当前使用ajax可以无刷新浏览外,还要保证直接请求改变的URL后也可以正常浏览,所以后端要对这些处理下。
PHP 判断是否为 AJAX 请求
jQuery 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest
在后端可以使用 $_SERVER["HTTP_X_REQUESTED_WITH"] 来获取。(注意:中划线换成了下划线,不区分大小写)
由此,我们可以这样来判断是否为 ajax 请求:
// php 判断是否为 ajax 请求
if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){
// ajax 请求的处理方式
}else{
// 正常请求的处理方式
};