在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 相关文章推荐
杏林同学录(三)
Oct 09 PHP
UCenter Home二次开发指南
May 28 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
php 调用远程url的六种方法小结
Nov 02 PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
php 不使用js实现页面跳转
Feb 11 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
PHP多线程编程之管道通信实例分析
Mar 07 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
Yii2.0实现生成二维码功能实例
Oct 24 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中实现进程间通讯
2006/10/09 PHP
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
PHP重定向的3种方式
2013/03/07 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
总经理岗位职责
2013/11/09 职场文书
关于赌博的检讨书
2014/01/08 职场文书
高中军训感想300字
2014/03/04 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
中国世界遗产导游词
2015/02/13 职场文书
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL