zoukankan      html  css  js  c++  java
  • 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;  
        }
  • 相关阅读:
    sabaki and leelazero
    apply current folder view to all folders
    string operation in powershell
    wirte function in powershell
    add environment path to powershell
    Module in powershell
    sql prompt
    vmware中鼠标在部分区域不能使用
    调整多个控件的dock的顺序
    行为型模型 策略模式
  • 原文地址:https://www.cnblogs.com/hubing/p/4968534.html
Copyright © 2011-2022 走看看