我目前正在使用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都不会更改(即使它已被更改)。
任何帮助将不胜感激,
感谢。
答案 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");
}