Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript codeigniter会话不存在';t根据ajax请求更新_Javascript_Php_Jquery_Ajax_Codeigniter - Fatal编程技术网

Javascript codeigniter会话不存在';t根据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

为什么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: 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.    
    }