ajax是一类http请求,天然包含请求头,和请求体。php
当服务器接收到ajax请求时,为了专门给ajax返回某一种特定形式(如json)的数据,就须要知道当前请求是不是ajax请求。java
因为时间的关系,这里只给出php端判断请求的头的方式,至于java,python,C#而言,原理同样,请求标记name都是一致的,因此只需使用各自的api就能够实现。python
<?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()来获取ajax
<?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中也同样spring
//使用 servlet或者struts2,springmvc中的request访问 String xhr = request.getHeader('x-request-with'); if('xmlhttprequest'.equal(xhr)){ }
因此,在某些框架如ThinkPHP,直接将这个状态封装成常量json
<?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) { //.... } ?>