【问题标题】:grails jquery auto update div with fetching from DBgrails jquery自动更新div并从数据库中获取
【发布时间】:2015-02-19 11:17:03
【问题描述】:

我有一组显示在 html 页面中,使用 <g:each>,在 div 中,例如 class="class1"。

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

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

我该如何实现这样的功能?

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

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

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

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

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

【问题讨论】:

    标签: jquery grails


    【解决方案1】:

    不确定这是否有帮助,你的问题不是很清楚 - 你可以运行 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 类似的事情。

    【讨论】:

      【解决方案2】:

      我已经解决了!在 freenode 上#grails 的 joshm76 的帮助下。

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

      1. 我需要一个包含我需要更新的 div 内容的模板
      2. 我需要一个控制器,通过模型将所需的值传递给模板
      3. 我需要将它包含在我想用
      4. 更新的 div 中
      5. 使用 jquery 更新 div 内容

      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()函数,结果好像是一样的

      【讨论】:

      • 通过这种方法,每当 div 更新时,页面似乎一直在刷新。页面实际上并没有刷新,但每次 div 更新时页面中都会出现闪烁。我们可以忽略这个眨眼吗?谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多