繁体   English   中英

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

[英]How would we use Javascript to create a real-time feed?

我目前正在使用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都不会改变(即使它已被更改)。

任何帮助,将不胜感激,

谢谢。

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

要按预期更新数据,可以使用AJAX 您可以在线找到大量教程。

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

如果右键单击Web浏览器中的页面并选择查看源 ,您可能会理解我的意思。 没有单行的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>

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

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

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM