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‘]判断。

    /**
      * 当前请求是否ajax请求
      *
      * @access public
      * @return bool
      */
     function isAjax()
     {
         return isset($_SERVER[‘HTTP_X_REQUESTED_WITH‘]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH‘]) == ‘XMLHttpRequest‘;
     }

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请求:

    switch ($_SERVER[‘HTTP_ACCEPT‘]){
        case ‘application/json, text/javascript, */*‘:
            //  JSON 格式
            break;
        case ‘text/javascript, application/javascript, */*‘:
            // javascript 或 JSONP 格式
            break;
        case ‘text/html, */*‘:
            //  HTML 格式
            break;
        case ‘application/xml, text/xml, */*‘:
            //  XML 格式
            break;
    }
时间: 2024-10-27 07:01:32

PHP判断ajax请求:HTTP_X_REQUESTED_WITH的相关文章

php后台判断ajax请求

if (isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && $_SERVER["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest") { }

php ajax请求判断

2017小端午假期刚过,新的一轮工作又开始了,But,上三天又休息了,激动ing^^ FineCMS学习第二节:M_Controller学习: 今天在M_Controller内遇到如下代码,故对如何判断ajax请求,post请求及REQUEST_TIME于time()函数差别做了一下学习,再次记录给大家参考 define('IS_AJAX', $this->input->is_ajax_request()); define('IS_POST', $_SERVER['REQUEST_METHOD

利用闭包实现多次ajax请求只执行最后一次

点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待.我们知道一般我们用ajax是异步请求,那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能是最后一次也可能是第二次.那么我们怎么解决这个问题呢,简单粗暴的方法就是在发送请求的时候将按钮disabled在请求完成成功之后解除disabled,那么一旦请求失败请求将一直处于pending状态, 因此考虑的情况就多了success,error,complete等事件,而且不利于用户体验.aja

springboot+shiro 02 - 异步ajax请求无权限时,返回json格式数据

博客: https://www.cnblogs.com/youxiu326/p/shiro-01.html github:https://github.com/youxiu326/sb_shiro_session.git 在原有基础上添加 SimpleFormAuthenticationFilter /** * 自定义过滤器,ajax请求数据 以json格式返回 * Created by lihui on 2019/2/28. */ public class SimpleFormAuthenti

PHP判断一个请求是Ajax请求还是普通请求

先说前端使用 jQuery 时怎么区分: jQuery 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest 在后端可以使用 $_SERVER["HTTP_X_REQUESTED_WITH"] 来获取.(注意:中划线换成了下划线,不区分大小写) 由此,我们可以这样来判断是否为 ajax 请求: // php 判断是否为 ajax 请求 <a href="http://www.cnblogs.

PHP 判断是否为 AJAX 请求

先说前端使用 jQuery 时怎么区分: jQuery 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest 在后端可以使用 $_SERVER["HTTP_X_REQUESTED_WITH"] 来获取.(注意:中划线换成了下划线,不区分大小写) 由此,我们可以这样来判断是否为 ajax 请求: // php 判断是否为 ajax 请求 http://www.cnblogs.com/sosoft/ if(is

如何判断一个请求为ajax请求?

1.我们可以通过http协议头信息里的X-Requested-With进行判断 2.如果是使用jquery完成的ajax请求时,$_SERVER里会存在一个HTTP-X-REQUESTED-WITH键值,可以通过这个来判断 如: if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){ $username = isset($_POST['username']) ? addslashes($_POST['username']) : '';

对Ajax请求做Session过期判断

1 // 全局Ajax设置, 用于session过期判断 2 function ajaxSetup() { 3 $.ajaxSetup({ 4 timeout : 10000, 5 beforeSend : function(xhr) { 6 //添加ajax请求标识 7 xhr.setRequestHeader("ajaxReq", "ajax"); 8 }, 9 complete : function(xhr, ts) { 10 if (xhr.statusTe

java判断请求是否为ajax请求

/** * isAjaxRequest:判断请求是否为Ajax请求. <br/> * @param request 请求对象 * @return boolean * @since JDK 1.6 */ public boolean isAjaxRequest(HttpServletRequest request){ String header = request.getHeader("X-Requested-With"); boolean isAjax = "XM