在ajax中访问控制器的全局变量返回NULL


Accessing controller's global variable in ajax returns NULL

嗨,伙计们,我有一个控制器,处理数据在其索引()然后将它赋给一个全局变量。

我希望当页面成功加载时,ajax能够访问这个全局变量。

下面是我在index()中所做的:
class Search extends Ss_controller {
 public static $q;
    public function index(){
        $k = $this->input->get(NULL, TRUE);
        $data['title'] = "Search";
        $data['page_content'] = "search_results_view.php";
        $data['logout'] = "/./ssmis/home/logout";
        $data['active_nav'] = 'Search';
        $data['k'] = $k['k'];
        self::$q = array('123','456');
        ...

我有这个方法它将在ajax中被调用:

 public function q(){
        var_dump(self::$q );
        if(self::$q ){
            $response['error'] = false;
            $response['has_data'] = true;
            $response['message'] = 'Success';
            $response['data'] = $this->q;
            $this->echo_response($response,200,'OK!');
        } else {
            $response['error'] = true;
            $response['message'] = 'No results returned';

            $this->echo_response($response,200,'Not OK!');
        }
    }

问题是var_dump(self::$q);返回NULL。

如何获得$q i在我的控制器的索引()分配的值?

谢谢!

你混淆了术语。在你的代码中,$q是一个类静态变量,而不是一个全局变量-这些是通过在变量名称之前使用关键字global来定义的,例如global $foo注意:在2015年使用global是一个非常糟糕的主意™ -不要这样做。

其次,你似乎不理解请求-响应是如何工作的。如果调用index方法,它会设置这个变量,但是一旦脚本完成执行,self::$q就不再存在了。AJAX请求不是精灵的尘埃,它是一个常规的HTTP请求——一个新的请求。对调用q()的路由的新请求以前不会调用index(),因此从AJAX请求的角度来看,没有执行设置self::$q的代码。换句话说,您在单个请求过程中设置的变量仅在该请求返回响应之前存在。如果您希望它持久化,则需要将$q的值存储在某种形式的持久化存储中——数据库、用户会话、cookie或类似的东西。