在php中判断一个请求是ajax请求还是普通请求的方法


Posted in PHP onJune 28, 2011

/path/to/pkphp.com/script.php?ajax
在php脚本中使用如下方法判断:

if(isset($_GET['ajax'])) { 
...这是一个ajax请求,然后... 
} 
else { 
...这不是一个ajax请求,然后... 
}

通过传递_GET参数的方法简单实现了网页请求的判断。但是如果需要这样的功能,这个方法可能就有弊端,功能需求如下:
1.通过ajax请求的网页与普通请求的网页内容是不相同的
2.通过ajax请求的网页是为了方便用户操作,两种方法请求打开的网页必须的内容是相同的,只是ajax请求到的网页内容比较简化和使用,去除了网页的大框架模板。
3.这么做的目的是:用户在网页操作时通过ajax实现,而搜索引擎访问网页时(相当于普通打开网页),得到的内容是一个完整的网页(包含了网页的大框架模板)。
要完成上面的这个功能,就不能使用前面介绍的通过GET参数传递来判断了,如果使用GET传递来判断的话,用户ajax请求和普通网页请求都会是一样的内容,因为你不可能为一个链接设置一个带ajax判断参数和不带的URL。那么如何才能实现这个功能呢?必须通过服务器端PHP判断解决这个问题。也就是今天要说的PHP如何判断ajax请求。这个问题要解决有一个先决条件,那就是你使用的ajax框架必须是jquery。在jquery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,你可以利用如下方法判断某个请求是ajax请求还是普通请求:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
..这是一个ajax请求,然后...
}
else {
..这不是一个ajax请求,然后...
}
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH
{
...这是一个ajax请求,然后...
}
else {
...这不是一个ajax请求,然后...
}
利用这个来进行判断操作,可以使网页端的URL保持一致,但是能够对两种不同的请求却能够得到不同内容的网页。即实现了用户操作优化,又不影响搜索引擎收录,我觉得是一个很棒的解决方案!
这里有一个另外需要注意的问题,就是如果你的jquery请求是通过iframe打开网页的,那么HTTP_X_REQUESTED_WITH参数不会被传递,也就是说你没有办法判断请求的类型。

主要内容是:

1.
这个问题要解决有一个先决条件,那就是你使用的ajax框架必须是jquery。在jquery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,你可以利用如下方法判断某个请求是ajax请求还是普通请求:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{

2.
这里有一个另外需要注意的问题,就是如果你的jquery请求是通过iframe打开网页的,那么HTTP_X_REQUESTED_WITH参数不会被传递,也就是说你没有办法判断请求的类型。

PHP 相关文章推荐
剖析 PHP 中的输出缓冲
Dec 21 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
10个简化PHP开发的工具
Dec 25 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
php编程实现获取excel文档内容的代码实例
Jun 28 #PHP
PHP学习笔记之数组篇
Jun 28 #PHP
php设计模式 Visitor 访问者模式
Jun 28 #PHP
php懒人函数 自动添加数据
Jun 28 #PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 #PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 #PHP
php skymvc 一款轻量、简单的php
Jun 28 #PHP
You might like
php中的登陆login
2007/01/18 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
js left,right,mid函数
2008/06/10 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
python进行文件对比的方法
2018/12/24 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
事业单位辞职信范文
2014/01/19 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
商务考察邀请函模板
2015/02/02 职场文书
教师个人成长总结
2015/02/11 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby
Golang 切片(Slice)实现增删改查
2022/04/22 Golang