Javascript grails刷新google图表

Javascript grails刷新google图表,javascript,ajax,grails,gsp,Javascript,Ajax,Grails,Gsp,我的grails应用程序中有一个页面X,它有一个显示图表的按钮。它将调用具有域对象id的控制器,图表将在另一个页面中呈现。在这之前,一切对我来说都很清楚 但是,我必须每隔20秒重新加载渲染的图表页面。我的网站是一个只有少数管理员用户的私人网站。所以我决定使用简单的javascript轮询来进行刷新。 这是图表gsp页面中的代码片段,我希望每20秒重新加载一次。可能使用javascriptsetInterval 我的控制器需要在创建图表时传入传感器id,我可以使用java脚本来完成吗?如果是这样

我的grails应用程序中有一个页面X,它有一个显示图表的按钮。它将调用具有域对象id的控制器,图表将在另一个页面中呈现。在这之前,一切对我来说都很清楚

但是,我必须每隔20秒重新加载渲染的图表页面。我的网站是一个只有少数管理员用户的私人网站。所以我决定使用简单的javascript轮询来进行刷新。 这是图表
gsp
页面中的代码片段,我希望每20秒重新加载一次。可能使用javascript
setInterval

我的控制器需要在创建图表时传入传感器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>

var int=self.setInterval(“chart()”,1000);
敏感变种;
功能图(){
var d=新日期();
变量t=d.toLocaleTimeString();
sensid=document.getElementById(“sensorid”).value;
}
${remoteFunction(控制器:“构建”,操作:“createChart”,参数:“'sid=”+sensid”)}

是否有一种javascript可以重新加载页面的方法。整版重新加载也可以。我对javascript几乎一无所知,因此非常感谢您的帮助。

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

1) 在GSP中包含元刷新标签。例如:

<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秒钟自动执行一次,例如在这个HTML示例中(非常精简,所以是的,我跳过了头、体和其他标记等内容):

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

Hello world.

setTimeout(“window.location.reload()”,5000);
你好,世界。

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

这很有效!现在我越来越雄心勃勃了……:)只重新加载页面的一部分容易吗?如何使用相同的参数集从java脚本调用控制器?我很想知道。这取决于你对“容易”的定义;)查看该插件的文档页面,它似乎确实支持使用它编写更有趣的Javascript所需的功能,但由于您提到您不精通JS,这将使它变得更难。但是,在“使用不同参数调用”部分,如果您使用上面提到的window.location.href函数,则可以将其指向您选择的URL(例如window.location.href=“/mycontroller?param1=foo¶m2=bar”;)确定。我实际上想要使用相同的参数集。我的控制器负责日期等。我将id传递给视图,js应该获取这个参数(如何?),并在调用控制器时将其传递回。但无论如何,看起来这会重新加载整个页面…:(是的,window.location调用是重新加载的,因此AJAX方法与一些更高级的JS相结合将是您需要的。基本上,您需要调用另一个只返回可视化的控制器,然后用它替换页面内的内容。使用插件的人可能已经有了一个很好的例子,它是这样的。)这很可能是一大堆Javascript。我绝对建议把它作为一个单独的问题提出来,这样有这些技能的人就可以看到它。