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 相关文章推荐
用PHP将数据导入到Foxmail
Oct 09 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
PHP实现C#山寨ArrayList的方法
Jul 16 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 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的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
python线程池如何使用
2020/05/28 Python
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
质检的岗位职责
2013/11/17 职场文书
零件设计自荐信范文
2013/11/27 职场文书
教师业务学习制度
2014/01/25 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
犯错检讨书
2014/02/21 职场文书
小学家长学校培训材料
2014/08/24 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
妈妈别哭观后感
2015/06/08 职场文书
python实现剪贴板的操作
2021/07/01 Python
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
python flappy bird小游戏分步实现流程
2022/02/15 Python