大家好我有一个控制器,然后在其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的值?
谢谢!
答案 0 :(得分:1)
你正在混淆条款。
在您的代码中$q
是一个类静态变量,而不是全局变量 - 这些是通过在var名称之前使用关键字global
来定义的,例如global $foo
。 注意:在2015年使用global
是非常糟糕的想法 - 请勿这样做。
其次,您似乎并不了解请求 - 响应的工作原理。如果调用index方法,则会设置此变量,但一旦脚本完成执行,self::$q
就不再存在。 AJAX请求不是小精灵,它是一个常规的HTTP请求 - 一个新的请求。调用q()
的路由的全新请求之前不会调用index()
,因此从AJAX请求的角度来看,没有执行设置self::$q
的代码。换句话说,您在单个请求过程中设置的变量仅存在,直到该请求返回响应。如果您希望它持久存在,则需要将$q
的值存储在某种形式的持久存储中 - 数据库,用户会话,cookie或类似内容。