会话变量未在javascript代码中更新

时间:2012-01-05 10:14:35

标签: php javascript jquery

delete_define.php包含以下代码段:

<?php
    session_start();
?>

<form action="delete_now.php" target="upload_target"  onsubmit="return my_func_1();">
    <input type="submit" name="my_submit" class="my_submit" value="submit"/>
    <iframe id="upload_target" name="upload_target" src1111="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>

<script type="text/javascript">
    function my_func_1(){
       //alert("from within my_func() =" +<?php echo $_SESSION['my_session'];  ?>);
       alert(" my_func_1");
       return true;
    }

    function my_func_2(){
       alert("my_func_2 =" +<?php echo $_SESSION['my_session'];  ?>);
       return true;
    }
</script>

delete_now.php有:

<?php
    session_start();
    $_SESSION['my_session']=rand();
?>

<script type="text/javascript">   
    alert("from within delete_now.php = " +<?php echo $_SESSION['my_session'];  ?>);
    window.top.window.my_func_2();
</script>

问题是my_func_2()没有像delete_now.php中的警告框那样为会话变量提供相同的输出。

为什么?

EDIT: CHANGED THE CODE SAID TO BE IN delete_define.php

2 个答案:

答案 0 :(得分:0)

那是因为当delete_define.php加载时,Session var是1,那么它就变成了另一个,但是你在JS中存储了以前的值。

你应该将session var存储到JS var中,然后在delete_now.php中的JS中将它重置为新值。

How to refresh value from frame and other situations

添加到第一个php文件的JS类似于:

var session_var = '<?php echo $_SESSION['my_session']; ?>';

然后在你的delete_now.php的JS中:

parent.session_var = '<?php echo $_SESSION['my_session']; ?>';

更改函数my_func以警告session_var JS变量。

这么想......

说明:

然后结果页面js将是:

function my_func_2(){
   alert("my_func_2 = 13513513513513");
   return true;
}

因此,当你调用它时,无论$ _SESSION中是什么,都会有旧的静态值。

整体流程说明:

  1. 加载delete_define.php
  2. Javascript var,包含初始化的实际文件名
  3. 来自提交
  4. 脚本delete_now.php正在运行
  5. 主窗口中的Javascript var刷新
  6. 你调用my_func_2(),它使用全局JS var,包含新文件名。

答案 1 :(得分:0)

您已经分配了随机数,因此根据您运行该页面的顺序会发出警报, 如果你从delete_now.php开始,两个连续的警报将是相同的。首先分配一些静态值,然后检查