我们如何使用Javascript创建实时Feed?

时间:2010-11-28 00:29:18

标签: javascript jsp

我目前正在使用JSP和Javascript进行编程。 (我也不是任何一位专家)。现在,我想要的是重复调用Javascript函数,并重复从数据库中查询其中一个变量(它是上次修改页面的日期)。如果此变量大于加载页面的时间,我希望页面刷新。

到目前为止我所拥有的:

...
<body onload="Javascript:refreshMethod()">
<script type="text/JavaScript">
<!--
function refreshMethod()
    {
     var interval = setInterval("timedRefresh()", 10000);
    }
function timedRefresh() {
 var currenttime = '<%=currentTime%>';
 var feedlastmodified = '<%=EventManager.getFeedLastModified(eventID)%>';
 var currenttimeint = parseInt(currenttime);
 var feedlastmodifiedint = parseInt(feedlastmodified);
 if(feedlastmodifiedint > currenttimeint)
 {
  alert(feedlastmodifiedint);
  setTimeout("location.reload(true);",timeoutPeriod);
 }
 if(feedlastmodifiedint < currenttimeint)
 {
  alert(feedlastmodifiedint + " : " + currenttimeint);
 }
}
//   -->


</script>

问题在于每次timedRefresh运行时,feedlastModifiedInt都不会更改(即使它已被更改)。

任何帮助将不胜感激,

感谢。

2 个答案:

答案 0 :(得分:2)

加载页面时,<% ... %>标记内的JSP代码仅在服务器端运行一次。如果您在浏览器中查看页面的来源,您会发现这些值已经放在JavaScript代码中,因此在每个计时器间隔期间它们不会更改。

要按预期更新数据,您可以使用AJAX。你可以在网上找到很多教程。

答案 1 :(得分:0)

JSP和JavaScript不会像您对编码所期望的那样同步运行。 JSP在webserver上运行,产生一堆字符,这些字符应该继续作为HTML / CSS / JS,并且web服务器将它作为HTTP响应发送到webbrowser,作为对webbrowser发起的HTTP请求的响应。最后,HTML / CSS / JS在webbrowser上运行。

如果您右键单击webbrowser中的页面并选择查看源,您可能会理解我的意思。没有单行的Java / JSP代码。它已经完成了生成HTML / CSS / JS的工作。 Java / JSP和JavaScript之间唯一的通信方式是HTTP。

您需要将此作业移动到服务器端的某个servlet,并让JS以异步方式调用此作业(“在后台”)。这也称为“Ajax”。这是jQuery的一点帮助的启动示例。

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).ready(function() {
        var refreshInterval = setInterval(function() {
            $.getJSON('refreshServlet', function(refresh) {
                if (refresh) {
                    clearInterval(refreshInterval);
                    location.reload(true);
                }
            });
        }, 10000);
    });
</script>

doGet() url-pattern上映射的servlet的/refreshServlet方法大致如下所示:

response.setContentType("application/json");
if (EventManager.getFeedLastModified(eventID) > currentTime) {
    response.getWriter().write("true");
} else {
    response.getWriter().write("false");
}

另见: