在Servlet中不更新的Javascript值

时间:2017-04-04 13:49:09

标签: javascript java jsp servlets

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

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

我的目标是从Java方法中检索一个值,并将它在servlet页面上写入DIV “ContentCharts”。 问题是Javascript不会更新“zeit”的vaule,并且始终将相同的时间戳写入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 varible “Jzeit”的值写入Serverlogs,并在单击按钮三次时获得此(Click to see the Picture)结果。正如您在图片中所见,我得到了正确的时间戳。

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

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

这些是我的想法和问题:

为什么JS变量在JAVA中的权限是错误的? 有没有选择说JS必须更新变量? 可能是JS保存了JAVA代码的答案并且不再运行它,但运行上层JAVA代码片段,因为JS和JAVA之间没有直接连接,就像值分配一样? 我该如何解决我的问题?

如果您需要更多信息来帮助我,请提出要求。

1 个答案:

答案 0 :(得分:0)

你对ajax模式有点困惑。

请注意,您在<%= jsp tags %>中编写的任何内容都将在服务器上呈现,然后发送到永远不会更改的客户端。因此,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/