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

时间:2015-07-23 15:59:53

标签: php ajax codeigniter

大家好我有一个控制器,然后在其index()中处理数据 将它分配给全局变量。

我想在成功加载页面时由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。

如何在控制器的index()中获取$ q i的值?

谢谢!

1 个答案:

答案 0 :(得分:1)

你正在混淆条款。 在您的代码中$q是一个类静态变量,而不是全局变量 - 这些是通过在var名称之前使用关键字global来定义的,例如global $foo注意:在2015年使用global非常糟糕的想法 - 请勿这样做。

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