我目前正在用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都不会改变(即使它已经改变了)。
任何帮助都会很感激,
谢谢。
发布于 2010-11-28 08:34:12
在加载页面时,<% ... %>标记内的JSP代码只在服务器端运行一次。如果在浏览器中查看页面的源代码,您会发现这些值已经放在JavaScript代码中,因此它们在每个计时器间隔期间都不会更改。
要按照预期更新数据,可以使用AJAX。你可以在网上找到大量的教程。
发布于 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的帮助下,这里有一个启动示例。
<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");
}另请参阅:
https://stackoverflow.com/questions/4294675
复制相似问题