PHP判断ajax请求:HTTP_X_REQUESTED_WITH

PHP判断ajax请求的原理:

在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息, 在jQuery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,PHP中就是在header一层判断是否是ajax请求,对应的根据$_SERVER['HTTP_X_REQUESTED_WITH']判断。


  
  
  1. /**
  2.   * 当前请求是否ajax请求
  3.   *
  4.   * @access public
  5.   * @return bool
  6.   */
  7.  function isAjax()
  8.  {
  9.      return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'XMLHttpRequest';
  10.  }
注意:

PHP判断AJAX请求时跨域问题:

如果是跨域的话这个,上面的isAjax就完全不正确了。跨域同域的问题参考:《$.getjson遇到的几个问题》使用$.getJSON来实现跨域,但是检测是否是ajax一直是false,并尝试$get(参看:$.get实现返回解析json数据以及jsonp跨域)之后无果的之后,考虑要使用万能的$ajax方法,见ajax的文档:

如果指定了script或者jsonp类型,那么当从服务器接收到数据时,实际上是用了<script>标签而不是 XMLHttpRequest对象。这种情况下,$.ajax()不再返回一个XMLHttpRequest对象,并且也不会传递事件处理函数,比如 beforeSend。

解释:

ajax跨域只能指定jsonp格式的数据,这个是就不是XMLHttpRequest对象了,就算你自定义一个$_SERVER['HTTP_X_REQUESTED_WITH']也是没有意义的

解决的办法:

针对跨域情况的getjson 或者ajax(jsonp)可以使用ACCEPT请求头部格式来判断

PHP端对应$_SERVER['HTTP_ACCEPT']

jsonp的请求一般是:text/JavaScript, application/javascript, */*

json的请求:application/json, text/javascript, */*

一个简单的判断跨域条件下的ajax请求:


  
  
  1. switch ($_SERVER['HTTP_ACCEPT']){  
  2.     case 'application/json, text/javascript, */*':  
  3.         //  JSON 格式  
  4.         break;  
  5.     case 'text/javascript, application/javascript, */*':  
  6.         // javascript 或 JSONP 格式  
  7.         break;  
  8.     case 'text/html, */*':  
  9.         //  HTML 格式  
  10.         break;  
  11.     case 'application/xml, text/xml, */*':  
  12.         //  XML 格式  
  13.         break;  
  14. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值