grails刷新谷歌图表

时间:2012-06-17 19:10:38

标签: javascript ajax grails gsp

我的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的知识,所以任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

由于您提到重新加载整个页面是可以接受的,因此有两种简单的方法:

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

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

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

2)通过Javascript“setTimeout”或特定操作,调用reload(或“history.go(0)”或“window.location.href = window.location.href”)。

例如,有一个按钮动作来测试它:

<input type="button" value="Reload this page" onClick="window.location.reload();">

或者每隔5秒自动执行一次,例如在这里(极度剥离,所以是的,我跳过了头部,身体和其他标签之类的东西......)HTML示例:

<script>
setTimeout("window.location.reload()",5000);
</script>

Hello world.

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