zoukankan      html  css  js  c++  java
  • ThinkPHP 源码分析之常量 IS_AJAX

    在控制器中判断请求是否是通过 AJAX 提交,ThinkPHP(3.2.2)中在 ThinkPHP/Library/Think/App.class.php (Line:49) 中定义了常量 IS_AJAX:

    define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false);

    通过检测 $_SERVER['HTTP_X_REQUESTED_WITH'] 的值是否是 XMLHttpRequest来判断,或者通过检测是否存在通过 POST 或者 GET 传递的 C('VAR_AJAX_SUBMIT') 的值来判断,该值是写在配置文件 ThinkPHP/Conf/convention.php(Line:159) 中:

    defined('THINK_PATH') or exit();
    return  array(
        //....
        /* 系统变量名称设置 */
        //....
        'VAR_AJAX_SUBMIT'       =>  'ajax',  // 默认的AJAX提交变量
        //...
    );

    控制器(如果不是通过 AJAX 提交,则报错):

            if(!is_AJAX){     
               $this->error("非法请求");
             }

    可以测试通过 AJAX 发送请求时,服务器端 $_SERVER['HTTP_X_REQUESTED_WITH'] 的值(控制器):

    $data =$_SERVER['HTTP_X_REQUESTED_WITH'];
    $this->ajaxReturn($data);

    在浏览器中通过观察 HTTP 响应:

  • 相关阅读:
    cshtml常用标签
    模板方法模式(Template Method)
    day10-python-协程异步IORabbitMQ队列 edis缓存
    Gitlab+Jenkins自动化部署
    day9-python-进程、线程和协程
    day8-python-socket编程
    day7-python-面向对象进程进阶
    day6-python-面向对象
    day5-python-常用模块
    zabbix监控rabbitmq
  • 原文地址:https://www.cnblogs.com/dee0912/p/4756782.html
Copyright © 2011-2022 走看看