【问题标题】:Javascript Value of Variable not updating in Servlet变量的 Javascript 值未在 Servlet 中更新
【发布时间】:2017-04-04 13:49:09
【问题描述】:

我已经简化了我的代码来分解问题,并有一个带有时间戳的简单示例来说明实际出了什么问题。 所以请不要惊讶我为什么要进行 AJAX 调用,这是为了 Servlet 的真正功能。

它是一个 Servlet,以下代码是 JSP 页面的一部分,我正在使用 JAVA 1.7 和 Tomcat 7。我在 Firefox 和 Chrome 中运行它。

我的目标是从 Java 方法中检索一个值并将其写入 servlet 页面上的 DIV “ContentCharts”。 问题是 Javascript 不会更新 "zeit" 的值,并且总是将相同的时间戳写入 DIV-Container 和控制台上

        $(document).ready(function()
        {       
            function ausgabe()
            {
                    <%
                    GregorianCalendar now = new GregorianCalendar();
                    DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG); 
                    String JZeit = df.format(now.getTime());
                    System.out.println("FKT ausgabe zeit:"+ JZeit);
                    %>  

                    var zeit='<%=JZeit %>';
                    console.info('Zeit:', zeit);
                    document.getElementById('ContentCharts').innerHTML  = zeit;
            }

            $("#subtab2").click(function()
             {

                $.ajax
                (
                    {
                        url:'overview',
                        data:{dbname:this.className},
                        type:'get',
                        cache:false,
                        success:function(){ausgabe();},
                        error:function(){alert('error');}       
                    }
                );
             }
         }

为了测试这一点,我将 JAVA 变量 "Jzeit" 的值写入服务器日志,并在单击按钮 3 次时得到 (Click to see the Picture) 结果。正如您在此处的图片中看到的,我得到了正确的时间戳。

现在我还将 JS 变量的值 "zeit" 发布到 Firebug 控制台中。现在我得到了错误的时间戳(Click to see the Picture)

DIV 中的内容令人耳目一新,但这里的问题与控制台中的相同,始终是相同的时间戳。

这些是我的想法和问题:

为什么 JS 变量在 JAVA 中是正确的却是错误的值? 有没有办法说 JS 必须更新变量? 难道是JS保存了JAVA代码的答案,不再运行,而是运行上面的JAVA Code Snippet,因为JS和JAVA之间没有直接联系,就像价值分配一样? 我该如何解决我的问题?

如果您需要更多信息来帮助我,请索取。

【问题讨论】:

    标签: javascript java jsp servlets


    【解决方案1】:

    你对 ajax 模式有点困惑。

    请注意,您在&lt;%= jsp tags %&gt; 中写入的任何内容都将在服务器上呈现,然后发送到客户端,它永远不会改变。因此,您的 ausgabe 函数在被调用时将始终返回相同的结果。对该函数的后续调用不会发出重复的服务器请求,这是您观察到的行为。

    要解决此问题,您的 ajax 调用中的 success 函数应采用一个参数,该参数将使用来自服务器的响应进行实例化。您在 ausgabe 函数的 jsp 标记中编写的 java 代码应移动到服务器,并且您需要的任何变量都应从 overview 端点返回。然后,应该重构 ausgabe 函数以获取包含服务器计算值的参数,并根据需要更新您的页面。

    这里是一些关于 ajax 请求的阅读:

    https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started

    http://api.jquery.com/jquery.ajax/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多