首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们将如何使用Javascript来创建实时提要?

我们将如何使用Javascript来创建实时提要?
EN

Stack Overflow用户
提问于 2010-11-28 08:29:18
回答 2查看 582关注 0票数 0

我目前正在用JSP和Javascript编程。(我在这两方面都不是专家)。现在,我想要的是重复调用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都不会改变(即使它已经改变了)。

任何帮助都会很感激,

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-11-28 08:34:12

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

要按照预期更新数据,可以使用AJAX。你可以在网上找到大量的教程。

票数 2
EN

Stack Overflow用户

发布于 2010-11-28 08:45:41

JSP和JavaScript并不像您从编码中期望的那样同步运行。JSP在and服务器上运行,生成一串字符,这些字符应该继续作为HTML/CSS/JS,并且and服务器将其作为HTTP响应发送到and浏览器,作为对and浏览器发起的HTTP请求的响应。最后,HTML/CSS/JS在the浏览器上运行。

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

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

代码语言:javascript
复制
<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()方法大致如下所示:

代码语言:javascript
复制
response.setContentType("application/json");
if (EventManager.getFeedLastModified(eventID) > currentTime) {
    response.getWriter().write("true");
} else {
    response.getWriter().write("false");
}

另请参阅:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4294675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档