嗨,伙计们,我有一个控制器,处理数据在其索引()然后将它赋给一个全局变量。
我希望当页面成功加载时,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或类似的东西。