codeigniter会话不会对ajax请求进行更新

时间:2016-10-14 06:45:15

标签: javascript php jquery ajax codeigniter

为什么在ajax请求完成后,codeigniter会话不会更新值?

控制器索引:

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'); ?>');
    }
});

控制器:

public function set_greeting()
    {
        $this->session->set_userdata( 'greetings', 'hi!' );
        echo $this->session->userdata('greetings');
    }
在提出ajax请求之后,我检查了firebug的控制台,并且控制器的响应回应了#34; hi!&#34;但是ajax成功的警示价值仍然是&#34;你好&#34;。

3 个答案:

答案 0 :(得分:3)

alert('<?= $this->session->userdata('greetings'); ?>');

此代码将在您的ajax请求之前呈现..

alert(response);

使用此功能查看更新的会话值;

答案 1 :(得分:2)

索引部分没有变化

build.gradle

我假设仅在public function index() { $this->session->set_userdata( 'greetings', 'hello!' ); } 页面上加载了javascript。请参阅我已更改index部分。

alert

对于$.ajax({ type: "POST", url: "<?php echo site_url("set_greeting"); ?>", data: data, cache: false, success: function(response){ alert(response); } }); 处理程序更新,如下所示

set_greeting

答案 2 :(得分:1)

PHP在服务器端运行,所有PHP代码在向客户端发送任何内容之前呈现,因此alert('<?= $this->session->userdata('greetings'); ?>');呈现给alert('hello');

当你这样做时

success: function(response){ alert('<?= $this->session->userdata('greetings'); ?>'); }

基本上是说如果ajax请求成功则提醒hello

因为PHP无法反映在没有页面刷新的情况下在服务器端完成的任何更改,所以无法看到对服务器会话所做的更改,但如果刷新页面,您将能够看到更改的值,因为再次呈现'<?= $this->session->userdata('greetings'); ?>'在服务器上,现在它的值更改为hi。(但在您的代码中,您将无法看到会话更改,因为您的索引方法始终将值设置为hello。更改的值将总是被页面刷新覆盖,但如果你在系统中使用任何其他控制器方法没有设置特定的会话值,你可以反映这一变化。)

为什么会在您的代码中发生这种情况?

这是因为您没有将response用于您的ajax请求。您正确地更改了服务器会话并且响应也是正确的,但由于您没有使用response,因此无法看到修改后的值。使用响应并且您应该都很好。