grails jquery自动更新div,从DB获取

时间:2015-02-19 11:17:03

标签: jquery grails

我有一个在html页面中使用<g:each>显示的集合,在div中,例如,class =&#34; class1&#34;。

如果在控制器中获取并传递到session.someVariableName中的html页面,则集合的内容。

我需要每隔10秒更新一次这个div。

我如何实现类似的东西?

我有一个正常工作的jquery脚本,如下所示:

 $(document).ready(
            function() {
                setInterval(function() {
                    $('.class1').toggle();
                }, 10000);
            });

它每10秒正确切换所需div的可见性。

我了解到要更新我必须使用函数.load()。但是我如何实现这个特定的功能呢?我到处搜索,找不到与我的问题相关的东西。

我是否需要实现一个额外的控制器来生成只包含所需div的视图并将.load()函数指向此视图?

2 个答案:

答案 0 :(得分:0)

不确定这是否有帮助,你的问题不是那么清楚 - 你可以运行一个jquery get来更新div的输出,而不是.html你也可以使用.append(附加到内容。

 $(document).ready(
            function() {
                setInterval(function() {


                     $.get("/"+baseapp+"/controller/action?id="+id+"&two="+two,function(data){
                            $('.class1').html(data).fadeIn('slow');
                    });
                }, 10000);
            });

使用ajax / websockets查看jssh插件,为你的q做类似的事情。

答案 1 :(得分:0)

我已经解决了这个问题!在freenode的#grails的joshm76的帮助下。

有几个步骤可以解决这个问题:

  1. 我需要一个包含我需要更新的div内容的模板
  2. 我需要一个控制器,模型将所需的值传递给模板
  3. 我需要在div中包含这个我想用
  4. 更新的内容
  5. 使用jquery我更新div内容
  6. 1)模板是名称前带_的.gsp文件,如_myTemplate.gsp。将它放在您将使用的控制器的视图文件夹中。

    2)

        def action(){
        def var
        //some logic to populate the variable
    
        Map model = [myVar: var]
        render(template: '_myTemplate', model: model)
    }
    

    在模板中,可以使用${myVar}

    访问变量

    3)在您需要更新的div中,放置<g:include>而不是之前的内容(现在内容在模板中)

    <g:include controller='controller' action='action' />
    

    4)jquery部分(每5秒获取一次模板):

        $(document).ready(
                function() {
                    setInterval(function() { 
                    $('#divId').load('/app/controller/action');
                    }, 5000);
                });
    

    你也可以使用$ .get()函数,结果似乎是相同的