0

我的 grails 应用程序中有一个页面 X,其中有一个显示图表的按钮。它将使用域对象的 id 调用控制器,并且图表在另一个页面中呈现。到这里我都清楚了。

但是我必须每 20 秒重新加载一次渲染的图表页面。我的网站是一个私人网站,只有少数管理员用户。所以我决定使用简单的 javascript 轮询来进行刷新。这是图表gsp页面中的片段,我想每 20 秒重新加载一次。也许使用 javascript setInterval
<g:render id="chart" template="/building/${chartTemplate}" model="${model}"></g:render>

我的控制器需要在创建图表时传入传感器 ID,我可以使用 java 脚本来执行此操作吗?如果是这样,我怎样才能将它从最初将它重定向到这里的控制器中获取到 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 的了解几乎为零,因此非常感谢任何帮助。

4

1 回答 1

2

既然您提到重新加载整个页面是可以接受的,那么两种简单的方法是:

1) 在您的 GSP 中包含 META REFRESH 标签。例如:

<meta http-equiv="refresh" content="5">

这非常方便,特别是如果您不需要更改参数(例如,如果控制器处理诸如用于更新图表的当前日期/时间等任何事情)。

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.

这使您可以更好地控制您所调用的内容,并且可以轻松修改以重定向到不同的控制器、具有新参数的相同控制器等。

于 2012-06-17T20:17:45.047 回答