我的 grails 应用程序中有一个页面 X,其中有一个用于显示图表的按钮。它将使用域对象的 id 调用 Controller ,并且图表将在另一个页面中呈现。到这里一切对我来说都清楚了。
但是我必须每 20 秒重新加载渲染的图表页面。我的网站是一个私有(private)网站,只有少数管理员用户。所以我决定使用简单的 javascript 轮询来进行刷新。
这是图表 gsp
中的片段我想每 20 秒重新加载一次页面。也许使用 javascript setInterval
.
<g:render id="chart" template="/building/${chartTemplate}" model="${model}"></g:render>
我的 Controller 需要在创建图表时传入传感器 ID,我可以使用 Java 脚本来执行此操作吗?如果是这样,我如何从最初将其重定向到此处的 Controller 将其获取到 javascript 函数。
这是我的 GSP 模板,用于呈现图表。
<div id="linechart"></div>
<gvisualization:lineCoreChart dynamicLoading="${true}" elementId="linechart" title="${title}"
width="${750}" height="${450}" columns="${columns}" data="${data}"/>
我使用了一些奇怪的 JavaScript,但不起作用。
<input type="text" id="sensorid" disabled="disabled" value="${sid }"/>
<g:javascript>
var int=self.setInterval("chart()",1000);
var sensid;
function chart(){
var d=new Date();
var t=d.toLocaleTimeString();
sensid = document.getElementById("sensorid").value;
}
${remoteFunction(controller:"building", action:"createChart", params:"'sid=' + sensid")}
</g:javascript>
有没有一种方法可以让 JavaScript 重新加载页面。整页重新加载也很好。我对 javascript 的了解几乎为零,因此非常感谢任何帮助。
最佳答案
既然您提到重新加载整个页面是可以接受的,那么有两种简单的方法是:
1) 在您的 GSP 中包含 META REFRESH 标签。例如:
<meta http-equiv="refresh" content="5">
这非常方便,特别是当您不需要更改参数时(例如,如果 Controller 处理诸如用于更新图表的当前日期/时间等任何内容)。
2) 通过 Javascript“setTimeout”或特定操作,调用重新加载(或“history.go(0)”或“window.location.href=window.location.href”)。
例如,用于测试按钮操作:
<input type="button" value="Reload this page" onClick="window.location.reload();">
或者每 5 秒自动执行一次,例如在这个中(非常精简,所以是的,我跳过了诸如 head、body 和其他标签之类的东西..)HTML 示例:
<script>
setTimeout("window.location.reload()",5000);
</script>
Hello world.
这使您可以更好地控制您所调用的内容,并且可以轻松修改以重定向到不同的 Controller 、具有新参数的同一 Controller 等。
关于javascript - Grails 刷新谷歌图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11074065/