如何通过定期调用remoteFunction从控制器获取数据
How to get the data from the controller by periodically calling remoteFunction?
情况如下:
我有一个文件,每30秒更新一次信息。我创建了一个读取文件并提取所需数据的方法。在控制器中,比方说RefreshController
,我有一个方法ref
,每30秒调用一次:
def ref = {
def Helper h = new Helper()
def d = JSON.parse(h.readFile())
render(view: 'index', model: [data: d])
}
通过grails remoteFunction
:
<g:javascript>
setInterval(refreshMe, 30000);
function refreshMe(){
${remoteFunction(controller: 'refresh', action: 'ref', onSuccess: 'justDoIt(e);')}
}
function justDoIt(e){
alert('hello'); // to create the table on the fly, but missing the data from the controller
}</g:javascript>
问题是,如何将刷新后的数据从控制器获取或访问到javascript函数中?我可以访问${data}
,但在这种情况下,我只获得控制器中data
变量的第一个初始化值。
我想使用刷新的数据来动态创建一个表,而不是在现有的元素上。
如果有任何想法,我将不胜感激!
在您的控制器上,只需渲染json结果而不是视图,看看下面的示例,当您渲染视图时,您的数据对象将是您的视图。onSuccess也有数据参数。希望这能帮助
class RefreshController {
def index() { }
def ref () {
println params
def json = new JsonBuilder()
json.state
{
name "Colorado"
statehood 1876
capital "Denver"
majorCities "Denver", "Colorado Springs", "Fort Collins"
}
render json
}
}
视图:
<!doctype html>
<%@ page import="com.package.example.*" %>
<html>
<head>
<title>Page Title</title>
<meta name="layout" content="main"/>
<r:require modules="jquery"/>
<r:script>
function refreshMe(){
//alert("refresh js")
${remoteFunction(controller: 'refresh', action: 'ref', onSuccess: 'justDoIt(data,textStatus);')}
}
function justDoIt(data,textStatus){
alert(responsData+" "+textStatus);
}
</r:script>
</head>
<body>
<a href="javascript:refreshMe();">Link text</a>
</body>
</html>
这是我的解决方案:
控制器:
import grails.converters.JSON
class RefreshController {
def index = {}
def ref= {
def d = getString()
render d as JSON
}
String getString(){
// ...
}
}
视图:
<html>
<head>
<title>Power In Use</title>
<meta name="layout" content="main" />
<g:javascript library="prototype"/>
</head>
<body>
<g:javascript >
setInterval( "refreshMe();", 30000 );
function refreshMe(){
${remoteFunction(action:'ref', controller:'refresh', onSuccess: 'makeTable(e)')}
}
function makeTable(e){
var d = e.responseText.evalJSON(true);
// do something with data d
}
</g:javascript>
</body>
</html>
相关文章:
- ROR:如何在不重新加载浏览器的情况下从控制器获取参数
- MVC Razor 从 javascript 视图中的控制器获取值
- 从圣杯控制器获取复选框值
- 尝试使用Backbone.sync从Rails中的动作控制器获取数据-非restful
- 如何在laravel4中从控制器获取数组到ajax函数
- 无法从Angular.js中的控制器获取数据
- Symfony2-从路由到控制器获取ID
- 如何在使用映射时从控制器获取数据
- 指令应从模板或控制器获取数据
- 在 angularjs 中从视图到控制器获取值
- Magento通过控制器获取整个页面,而不仅仅是变量值
- 如何从控制器获取表示 ngRepeat 中元素的 HTML 节点的参数
- 我的 Angular 指令没有从控制器获取数据
- 将返回的对象从控制器获取到 javascript 中
- 如何从控制器获取夹具中的记录总数
- 如何从指令中的控制器获取值
- 使用 Angular 的$http时无法从控制器获取 json 信息
- 无法将对象从控制器获取到 JSP
- 从控制器获取结果,使用t4模板生成js intellisense
- 从Typeaahead.js中的symfony控制器获取数据