• Linux
  • apache
  • centos
  • Git版本管理
  • Linux基本命令
  • linux配置与优化
  • Nginx
  • PHP
  • Redis
  • Supervisor
  • Swoole
  • windows
  • THINKPHP
  • 开发者手册
  • Chat GPT / Open Ai
  • PHP判断一个请求是AJAX请求还是普通请求

    全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:925篇文章
  • 发布时间:2016年06月03日 8:51:04
  • 所属分类:html, PHP+MySql
  • 阅读次数:2811次阅读
  • 标签:
  • 在PHP程序中,如何判断一个网页请求是ajax请求还是普通请求?自从我做的一个车网项目以来,这个问题困扰了我很久了,原因是这样的,我的那个车网项目,有一个四级联动的车型检索,必须得用ajax实现。功能是实现的蛮漂亮的,但是有一个问题,我发现在浏览器中直接输入我ajax提交的地址带上一些车型参数,浏览器就能把数据打印出来。我觉得这样非常不好。

    但是由于水平有限,这个问题直到今天才被我解决,特此留下文章以供有此需要的人学习。

    DEMO看过了吧?不知道您有没有发现普通请求和ajax请求的结果有什么不一样?呵呵~没事,没看明白的,下面我会详细说说是怎么实现的。

    首先说说原理:
    在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息
    如果您使用的是原生的ajax方法,也就是未使用jquery或者其他js框架包装的ajax方法,那么代码如下:

    ?
    1
    xmlHttpRequest.setRequestHeader("request_type","ajax"); 

    哦~对了,您一定知道xmlHttpRequest这个对象是怎么创建的吧?额?您没开玩笑吧?您不知道–那我劝您还是不要了解了,放心吧~您对他不了解也没事,下面我来告诉你怎么在jquery中使用,那是更加的简单啊~~

    通过jquery的$.ajax()方法,可以轻松地在发送ajax请求之前,创建我们自定义的header头信息。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $.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);
        }
    });

    上面的代码,是我的demo中用到的代码,有好几行吧,您别怕,要您注意的就是一个地址,找到了beforeSend了吧?对了,就是那里了,XMLHttpRequest.setRequestHeader(“request_type”,”ajax”);这一句代码就是向header头信息里面创建了一个我们自定义的一个变量“request_type”。

    恩~~说到这里,大家应该已经会在发送ajax请求前往header头信息中加入自定的信息了吧。
    接下来我来告诉大家如果在php中取得这个信息,也是相当简单呀
    如我之前定义的那个变量“request_type”,那么在php中就应该这样取得

    ?
    1
    $_SERVER['HTTP_REQUEST_TYPE']

    看了上面的代码之后,我想如此睿智的您一定已经发现规律了吧,对了,没错,就是将“request_type”这个变量全部大写(一定要大写),然后再加上一个“HTTP_”前缀,然后再$_SERVER这个超级变量中找就可以了。

    ?
    1
    2
    3
    if(isset($_SERVER['HTTP_REQUEST_TYPE']) &&$_SERVER['HTTP_REQUEST_TYPE'] =="ajax"){//ajax提交
    }else{//非ajax提交
    }

    上面的代码就是在php程序中判断请求到底是不是ajax请求了。

    “request_type”这个变量是我们自定义的哦,如果您喜欢的话,您也可以将她换成你所喜欢的名字,比如“test”,“is_ajax”…….

    基于以上的说明~~大家是否明白了呢?

    顶一下
    (0)
    100%
    订阅 回复
    踩一下
    (0)
    100%
    » 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。
  • 【上一篇】
  • 【下一篇】
  • 目前有 0 条留言 其中:访客:0 条, 博主:0 条

    给我留言

    您必须 [ 登录 ] 才能发表留言!