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 相关文章推荐
LotusPhp笔记之:基于ObjectUtil组件的使用分析
May 06 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
学习php中的正则表达式
Aug 17 PHP
PHP实现采集中国天气网未来7天天气
Oct 15 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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 年龄计算函数(精确到天)
2012/06/07 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
python scatter函数用法实例详解
2020/02/11 Python
Python中常用的os操作汇总
2020/11/05 Python
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
会计职业生涯规划范文
2014/01/04 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
员工工作表扬信范文
2014/01/13 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
心理学专业求职信
2014/06/16 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
贪污检举信范文
2015/03/02 职场文书
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
Python安装使用Scrapy框架
2022/04/12 Python