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之第四天
Oct 09 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 PHP
php 多文件上传的实现实例
Oct 23 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 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
递归列出所有文件和目录
2006/10/09 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
详解node中创建服务进程
2017/05/09 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
node.js获取参数的常用方法(总结)
2017/05/29 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python实现logistic分类算法代码
2020/02/28 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
2014年高考决心书
2014/03/11 职场文书
承诺书怎么写
2014/03/26 职场文书
合作投资意向书
2014/04/01 职场文书
学生保证书范文
2014/04/28 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
2015年电教工作总结
2015/05/26 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL