Javascript codeigniter会话不存在';t根据ajax请求更新
为什么codeigniter会话在ajax请求完成时不更新值 控制器索引:Javascript codeigniter会话不存在';t根据ajax请求更新,javascript,php,jquery,ajax,codeigniter,Javascript,Php,Jquery,Ajax,Codeigniter,为什么codeigniter会话在ajax请求完成时不更新值 控制器索引: public function index() { $this->session->set_userdata( 'greetings', 'hello!' ); } ajax请求: $.ajax({ type: "POST", url: "<?php echo site_url("set_greeting"); ?>", data: data, cache
public function index()
{
$this->session->set_userdata( 'greetings', 'hello!' );
}
ajax请求:
$.ajax({
type: "POST",
url: "<?php echo site_url("set_greeting"); ?>",
data: data,
cache: false,
success: function(response){
alert('<?= $this->session->userdata('greetings'); ?>');
}
});
在发出ajax请求之后,我检查了firebug的控制台,控制器的响应是“hi!”,但是ajax成功的警报值仍然是“hello”
使用此选项查看更新的会话值 PHP在服务器端运行,所有PHP代码在发送到客户端之前呈现,因此
alert(“”)代码>呈现为警报('hello')代码>
当你这样做的时候
成功:功能(响应){
警报(“”);
}
它基本上是说,如果ajax请求成功,则发出警报hello
由于没有页面刷新,PHP无法反映服务器端所做的任何更改,因此您无法看到对服务器会话所做的更改,但如果刷新页面,您将能够看到更改的值,因为'
在服务器上再次渲染,现在其值更改为hi
。(但在您的代码中,您将无法看到会话更改,因为您的索引方法始终将值设置为hello
。更改的值将始终随页面刷新而覆盖,但如果您在系统中使用未设置该特定会话值的任何其他控制器方法,则可以反映更改。)
为什么在代码中会发生这种情况
发生这种情况的原因是您没有对ajax请求使用响应。您正确地更改了服务器会话,响应也正确,但由于您没有使用响应,因此无法看到修改后的值。使用响应,您应该一切正常。索引部分没有更改
public function index()
{
$this->session->set_userdata( 'greetings', 'hello!' );
}
我假设下面的javascript只加载在索引
页面上。请参阅我已更改警报
部分
$.ajax({
type: "POST",
url: "<?php echo site_url("set_greeting"); ?>",
data: data,
cache: false,
success: function(response){
alert(response);
}
});
会话已设置,需要刷新页面。然后您将获得会话集值。我认为在成功的ajax请求后应该呈现代码行?
alert(response);
public function index()
{
$this->session->set_userdata( 'greetings', 'hello!' );
}
$.ajax({
type: "POST",
url: "<?php echo site_url("set_greeting"); ?>",
data: data,
cache: false,
success: function(response){
alert(response);
}
});
public function set_greeting(){
$this->session->set_userdata( 'greetings', 'hi!' );
$greetings = $this->session->userdata('greetings');
$this->output->set_output($greetings); // Note: set output data here.
}