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

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

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

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

<?PHP
functionisAjax()
{
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']))
{
if('xmlhttprequest'==strtolower($_SERVER['HTTP_X_REQUESTED_WITH']))
{
returntrue;
}
}
returnfalse;
}

//就这么简单
?>

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访问
Stringxhr=request.getHeader('x-request-with');
if('xmlhttprequest'.equal(xhr)){

}

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

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

相关文章

JS原生Ajax操作(XMLHttpRequest) GET请求 POST请求 兼容性问题 利用iframe模拟ajax 实现表单提交的返回...
AJAX 每日更新前端基础,如果觉得不错,点个star吧 &#128515; https://github.com/WindrunnerMax/E...
踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使用的SpringSe...
很早就听闻ajax的名声,但是却一直不知道怎么用,今天自己捣鼓了一下,竟然会用了,哈哈哈哈。 为了防止...
需要在服务器上进行哈 jquery的ajax方法: // jquery请求 $.ajax({ url: &quot;./server/slider.js...
Ajax函数封装ajax.js // Get / Post // 参数 get post // 是否异步 // 如何处理响应数据 // URL // var...