[英]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>
在/refreshServlet
的url-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.