美文网首页web编程之路PHP实战代码改变世界
PHP判断ajax请求:HTTP_X_REQUESTED_WIT

PHP判断ajax请求:HTTP_X_REQUESTED_WIT

作者: hopevow | 来源:发表于2016-10-20 14:02 被阅读279次

    PHP判断ajax请求的原理:

    在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息, 在jquery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,php中就是在header一层判断是否是ajax请求,对应的根据$_SERVER['HTTP_X_REQUESTED_WITH']判断。一般情况下$_SERVER['HTTP_X_REQUESTED_WITH']默认是XMLHttpRequest;$_SERVER['HTTP_X_REQUESTED_WITH']也可以自定义创建的,使用XMLHttpRequest.setRequestHeader(name,value);

    //服务端
    function is isAjax() {
          if (SERVER('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') {
                $isajax = !empty($_GET['_return']) ? $_GET['_return'] : 1;
                $ajax_request = 1;
            }
                 return $isajax;
    }
    
    //客户端 
    $.ajax({
        type        : "GET",
        url     : base_url + 'php_check_ajax_request/get_user_list.html',
        beforeSend  : function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("request_type","ajax");
        },
        success     : function(data){
            $("#user_list").html(data);
            $tip.hide();
            $button.attr('disabled',true);
        }
    });
    
    

    关于AJAX跨域请求json数据的实现方法

    通过jQuery的JSONP

    jQuery.getJSON方法:

    jQuery.getJSON('http://search.twitter.com/search.json/.callback=?",{
      q:"Arsenal"
    }, function(tweets){
      console.info('twitter retrund:', tweets);
    });
    

    也可以使用如下 代码:

    $.ajax({
      type: "get",
      data: "random="+Math.random(),
      url:url,
      dataType:"jsonp",
      jsonp:"callback",
       success: function(data){
          $.each(data, function(key,val){
              $("#myDiv").html($("#myDiv").html()+val.cvalue+"</br>");
          )}
          }
    })
    
    

    AJAX POST&跨域 解决方案 - CORS

    CORS(跨域资源共享,Cross-Origin Resource Sharing
    假设我们页面或者应用已在 http://www.test1.com 上了,而我们打算从 http://www.test2.com 请求提取数据。一般情况下,如果我们直接使用 AJAX 来请求将会失败,浏览器也会返回“源不匹配”的错误,"跨域"也就以此由来。
      利用 CORS,http://www.test2.com 只需添加一个标头,就可以允许来自 http://www.test1.com 的请求,下图是我在PHP中的 hander() 设置,”号表示允许任何域向我们的服务端提交请求


      
    也可以设置指定的域名,如域名 http://www.test2.com ,那么就允许来自这个域名的请求*:

    当前我设置的header为“”,任意一个请求过来之后服务端我们都可以进行处理&响应,那么在调试工具中可以看到其头信息设置,其中见红框中有一项信息是“Access-Control-Allow-Origin:** ”,表示我们已经启用CORS

    相关文章

      网友评论

        本文标题:PHP判断ajax请求:HTTP_X_REQUESTED_WIT

        本文链接:https://www.haomeiwen.com/subject/abyfuttx.html