php中如何判断一个网页请求是ajax请求还是普通请求


Posted in PHP onAugust 10, 2013

如何在php中判断一个网页请求是ajax请求还是普通请求?你可以通过传递参数的方法来实现,例如使用如下网址请求:
/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请求,然后...
}

利用这个来进行判断操作,可以使网页端的URL保持一致,但是能够对两种不同的请求却能够得到不同内容的网页。即实现了用户操作优化,又不影响搜索引擎收录,我觉得是一个很棒的解决方案!

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

PHP 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
php桌面中心(四) 数据显示
Mar 11 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
初识PHP
Sep 28 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
各种快递查询--Api接口
Apr 26 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 PHP
PHP二维数组去重实例分析
Nov 18 PHP
PHP getName()函数讲解
Feb 03 PHP
Yii2框架中一些折磨人的坑
Dec 15 PHP
php一些错误处理的方法与技巧总结
Aug 10 #PHP
Zend Studio 实用快捷键一览表(精心整理)
Aug 10 #PHP
php对csv文件的读取,写入,输出下载操作详解
Aug 10 #PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 #PHP
php var_export与var_dump 输出的不同
Aug 09 #PHP
页面乱码问题的根源及其分析
Aug 09 #PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 #PHP
You might like
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
python中执行shell命令的几个方法小结
2014/09/18 Python
python实现在windows下操作word的方法
2015/04/28 Python
Python实现二叉搜索树
2016/02/03 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Python decimal模块使用方法详解
2020/06/08 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
高三历史教学反思
2014/01/09 职场文书
先进事迹演讲稿
2014/09/01 职场文书
2015年计划生育责任书
2015/05/08 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python