文档章节

服务器端如何判断ajax请求方式

IamOkay
 IamOkay
发布于 2014/10/27 21:21
字数 402
阅读 1850
收藏 0

ajax是一类http请求,自然包含请求头,和请求体。

当服务器接收到ajax请求时,为了专门给ajax返回某一种特定形式(如json)的数据,就需要知道当前请求是否是ajax请求。

由于时间的关系,这里只给出php端判断请求的头的方式,至于java,python,C#而言,原理一样,请求标记name都是一致的,所以只需使用各自的api就可以实现。

<?php
 function isAjax()
 {
   if(isset($_SERVER['HTTP_X_REQUESTED_WITH']))
   {
     if('xmlhttprequest'==strtolower($_SERVER['HTTP_X_REQUESTED_WITH']))
     {
       return true;
     }
   }
   return false;
 }
 
//就这么简单
?>

在PHP中,属性HTTP_X_REQUEST_WITH来自于底层封装,如果不想使用 $_SERVER来判断,可以使用php提供的 getAllHeaders()来获取

<?php
$headers = getallheaders();
//可以遍历一下
while (list($header, $value) = each($headers)) {
  echo "$header: $value<br>\n";
}
//$headers是一个数组,也可以使用已知的key读取数据,来判断是否是ajax请求
if(isset($headers['x-request-with']) && $headers['x-request-with']=='xmlhttprequest')
{
  echo 'yes';
}
?>

在java中也一样

//使用 servlet或者struts2,springmvc中的request访问
String  xhr =  request.getHeader('x-request-with');
if('xmlhttprequest'.equal(xhr)){

}

所以,在某些框架如ThinkPHP,直接将这个状态封装成常量

<?php
$isAjaxRequest =  isAjax();
 defined('IS_AJAX') or define('IS_AJAX',$isAjaxRequest);
 defined('IS_POST') or define('IS_POST',$_SERVER['REQUEST_METHOD']=='POST')
 ///......
 if(IS_AJAX && IS_POST)
 {
   //....
 }
?>


© 著作权归作者所有

IamOkay

IamOkay

粉丝 198
博文 483
码字总数 402960
作品 0
海淀
程序员
私信 提问
加载中

评论(3)

代码猎人

引用来自“joachim”的评论

看不懂

自己写个JAVA的,就懂了
IamOkay
IamOkay

引用来自“joachim”的评论

看不懂
下次使用ajax的时候打开firebug,查看请求头
刘梓航
刘梓航
看不懂
再也不学AJAX了!(二)使用AJAX

在上一篇文章中我们知道,AJAX是一系列技术的统称。在本篇中我们将更进一步,详细解释如何使用Ajax技术在项目中获取数据。而为了解释清楚,我们首先要搞清楚我们是从哪里获取数据的,其次我们...

LiBin
2017/12/01
0
0
jQuery类库新手使用指南之AJAX方法 - 第一部分

日期:2012/03/07 来源:GBin1.com 最 近几年很多网站,事实上基本所有的网站都使用一个技术 - AJAX来提供流畅并且高效的用户体验。无论是出名的Google Maps还是Gmail,或者是流行的javascr...

gbin1
2012/03/12
0
0
ajax 学习总结

学习一样动习首先应该明白: 这是什么? ajax是什么? 我们就从理解“ajax”的字面含义开始。 AJAX = Asynchronous (美[e’sɪŋkrənəs]) 异步的 JavaScript And XML 也就是说,ajax就是...

sinat_34647836
2017/07/21
0
0
小白来实现一个Ajax请求[Ajax使用方法及相关知识点详细解析——超级全]

写在前面: 本文主要总结整理Ajax使用方法背景知识点的详细解析,以及Ajax跨域的具体使用方式并且对栗子进行了讲解,需要的朋友可以过来参考下,喜欢的可以点波赞,或者关注一下本人,希望通...

OB丶Koro1
2017/06/01
0
0
再也不学AJAX了!(三)跨域获取资源 ② - JSONP & CORS

浏览器的“同源策略”固然保障了互联网世界的数据隐私与数据安全,但是如果当我们需要使用AJAX跨域请求资源时,“同源策略”又会成为开发者的阻碍。在本文中,我们会简单介绍需要跨域请求资源...

LiBin
2017/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我为什么要写微信公众号

埋一颗种子,细心呵护,静待她枝繁叶茂,葱郁参天 V2论坛上有个帖子【做程序员最重要的还是一定要有自己的作品】,作者写道: 能有一个作品和你的名字联系在一起,应当成为在职业生涯前期着意...

运维咖啡吧
12分钟前
0
0
数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
5
0
GIL 已经被杀死了么?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q 花下猫语: Python 中最广为人诟病的一点,大概就是它的 GIL 了。...

豌豆花下猫
昨天
6
0
git commit message form

commit message一般包括3部分:Header、Body、Footer。 <type>(<scope>):<subject>blank line<body>blank line<footer> header是必需的,body、footer可以省略。 header中type、subject......

ninjaFrog
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部