为什么在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;。
答案 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
,因此无法看到修改后的值。使用响应并且您应该都很好。