AJAX调用后会收到旧会话数据的警报

时间:2013-12-18 13:57:34

标签: javascript php ajax session

我有一个更新$_SESSION变量的AJAX调用,之后<script>应该回显新变量。数据到达.php页面,并且还存储在会话中。但它在AJAX通话后警告旧数据 我已尝试使用setTimeout,并尝试移动在AJAX成功通话之外提醒新变量的通话。我仍然得到相同的结果。

为什么不警告新的$_SESSION数据?

AJAX

<script>
$(function() {
    $('#sendBtn').click(function() {                
        var theva = $("#element_23").val();                                 
         $.ajax({
         type   : "POST",
         url    :'check.php',
         data   : {theva : theva},
         success: function() {
             setTimeout(function() {
             var theva2 = "<? echo $_SESSION['disp'];?>";
             alert(theva2);},3000);}                        
         });                                
    });     
});
</script>

check.php

<? 
if($_POST){
$_SESSION['disp'] = $_POST['theva'];}
?>  

2 个答案:

答案 0 :(得分:3)

var theva2 = "<? echo $_SESSION['disp'];?>";

这一行包含php代码,只会在页面加载时呈现。如果您刷新页面并查看源代码,您将看到我已更新。

不确定你想要实现的目标,但这是一个逻辑错误

根据您的评论编辑

您可以从check.php返回值:

<? 
if($_POST){
    $_SESSION['disp'] = $_POST['theva'];
    echo 'Session value is now: '.$_SESSION['disp'];
}
?>  

并改变你的js成功函数以提醒数据:

success: function(data) {

         alert(data);

     });   

答案 1 :(得分:1)

因为PHP是在服务器上呈现的。当您加载包含AJAX请求的页面时,将解释PHP代码,然后theva2将包含您的会话变量。

之后您可能会更改它,但由于主页面(包含AJAX代码)永远不会重新加载,它仍会显示旧值(因为它在您加载页面时呈现为服务器端,而不是在您创建AJAX时请求)。