2012-07-07 71 views
0

我有一个存储会话值的问题; 我无法通过AJAX Jquery调用增加会话计数变量 ,某些值通过 来运行,而我之前设置的用于存储会话的数组也会随着新的数值发生变化。我无法存储通过jquery ajax传递的会话值。在codeigniter php框架

什么是这里的问题:

1>当我使用一个控制器功能

startOnlineTest($testid=0) 
i set session countnew as 0 
$this->session->set_userdata('countnew',0); 
    and in view i use jquery to pass data to other function of same controller 
    public function ResponseOnline($qid,$response) 

使用jQuery的变化效果

echo "[removed]$(document).ready(function(){"; 
     foreach($question['childQuestion'] as $q=>$aq){ // 
echo "\$(\"input:radio[name=qid-$q]\").live('change',function(){ 
var sr=\$(\"input:radio[name=qid-$q]:checked\").map(function() { 
      return $(this).val(); 
      }).get().join(); 
     var qid = \$(\"input:radio[name=qid-$q]\").attr(\"qaid\"); 
     "; echo "\$.get('"; echo base_url();echo "testpapers/ResponseOnline/'+qid+'/'+sr,{},function(data) 
{\$('#res').html(data)}); 
});";} 
echo"});[removed]" ;// this script is working fine 

现在的问题是这样的,我得到了会议虽然我 使用阵列我的代码为ResponseOnline 是

public function ResponseOnline($qid,$response) 
    { 
    echo "this" .$this->session->userdata('countnew'); // this is not echo as set above by function startOnlineTest($testid=0)[/color] 
    i set session countnew as 
    $this->session->set_userdata('countnew',0) 

echo $d=$qid; // i know its no use but to save time as tested on $d 

$s=$response; 

if($this->session->userdata('countnew')==0) // algo for this function i check the          
               //countnew session varaible if 0 do this 
{             
$sc=$this->session->userdata('countnew');  // store the countnew variable 
echo $sc=$sc+1;        // increment the counter variable 
$this->session->set_userdata('countnew',$sc); // store it in session 
echo "this is incrementes session value";  
echo $this->session->userdata('countnew'); 
$r2[$d]=$s;        // store array value $r2 with key $d and value $s 
$this->session->set_userdata('res',$r2); //set this array value in session 
} 
else{         // if session countnew!=0 then do this 
$r2=$this->session->userdata('res'); // first store $r2 as array return from session 
$r2[$d]=$s;       //then add value to this array      

$this->session->set_userdata('res',$r2); // storing this array to session 
} 
echo '<pre>'; 
print_r($r2);  // printing the array 


} 

我得到发言权的结果为第一个电话是好的,但对于第二次叫我的价值是覆盖会话表演Array([32323]=>23))如果我通过功能(32323,23)如果我通过(33,42) 我得到Array([33]=>42)我的旧值被破坏。

+0

为什么你在喊吗? – 2012-07-07 06:31:06

回答

0

你应该只是在php中使用常规会话,因为codeigniter中的会话将只允许您存储单个项目。 事情是这样的:

$_SESSION['item'][] = $array; 

或者,也许你可以做这样的事情仍然使用CodeIgniter的会议:

$items = $this->session->userdata('items'); 
array_push($items, $new_item); 
$this->session->set_userdata('items', $items); 

如果要定义键以及:

$items = $this->session->userdata('items'); 
$items['your_key'] = $new_item; 
$this->session->set_userdata('items', $items); 
+0

但我想添加关键以及价值。我的意思是我想使用assoc数组。所以我如何使用array_push – 2012-07-07 06:56:15

+0

编辑我的答案。你明白了。只需进一步自定义代码以符合您的需求。 – 2012-07-07 07:18:01

+0

感谢您的回复,但我使用相同的代码,但得到相同的错误我使用这个$ r2 = $ this-> session-> userdata('res'); //首先将$ r2作为数组存储返回 $ r2 [$ d] = $ s; //然后为此数组添加值 $ this-> session-> set_userdata('res',$ r2); – 2012-07-07 13:21:37