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

原创
2014/10/27 21:21
阅读数 2.5K

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)
 {
   //....
 }
?>


展开阅读全文
加载中
点击加入讨论🔥(3) 发布并加入讨论🔥
3 评论
0 收藏
0
分享
返回顶部
顶部