【问题标题】:session variable in javascript not updatingjavascript中的会话变量未更新
【发布时间】:2014-06-27 23:05:36
【问题描述】:

我正在研究两个 jsp(索引和导航)。我正在通过索引上的 ajax 调用部分 html 代码。我正在从navigation.jsp 页面调用函数“demo()”,并在index.jsp 页面内的脚本中定义函数。在这里,我在 navigation.jsp 页面中的会话变量中设置了一些变量值,但是当我在 index.jsp 页面中捕获它时,它保存了第一个值。但是当我调用 navigation.jsp 页面时,会话变量没有更新。有没有scopr相关的问题???

index.jsp page

     <script>
                    function demo()
                    {
                        var a ='<%= session.getAttribute("ab") %>';
                        alert(a);
                    }<script>

navigation.jsp page

     if(chk1.contains((Integer)value));
        { 
            ch = (String)chk1.get((Integer)value);
            session.setAttribute("ab", ch);
            String bu = (String)session.getAttribute("ab");
            out.println(bu);
        }

    <a onclick="demo()">demo</a>

【问题讨论】:

  • 我正在通过ajax将navigation.jsp的部分html代码调用到index.jsp。如果我创建函数“demo()”,那么它会给出错误“demo() not define”,但是当我在 index.jsp 中定义它时,它没有给出错误,但只包含会话变量的第一次值。
  • 我在 index 中定义函数并通过 navigation,jsp 调用。因为在 ajax 调用之后它已经成为 index.jsp 的一部分

标签: javascript jsp session scope


【解决方案1】:

当调用 JSP 页面时,会发生以下情况,按此顺序:

  • 服务器检查 .jsp 是否已经编译,以及自上次编译后它是否发生了变化。
  • 服务器通过 Jasper 编译器运行 jsp,该编译器将 jsp 解释为 Java 代码,任何非 Java(CSS、HTML、JavaScript 等)都放在字符串中。
  • Java 代码已编译并执行。
  • 结果被放置在响应中并发送给用户。

因此,您的语句:&lt;%= session.getAttribute("ab") %&gt; 在 HTML 发送给用户之前执行,var a 在调用 demo() 函数之前始终设置为 null


更多信息请查看我的另一篇帖子JSP inside ListItems onclick

如何验证?

在浏览器中右键,查看查看源代码,查看demo()函数。

注意:始终尽量避免 Scriplet 元素并使用JSP Standard Tag Library

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 2018-02-06
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多