2013-04-10 74 views
5

我正在使用数据表作为我的网上应用程序的网格。问题是,用户必须始终刷新页面才能从数据库获取当前数据,有没有办法可以自动完成此操作?因为有多个应用程序写入同一个表,并且webapp仅用于监视,但如果用户必须刷新页面才能获取当前数据,则它会胜出。 这里是我的初始化代码:如何在数据库中记录更改时不断更新数据表,一个websockets或长轮询实现

$('.{{datatable['class']}}').dataTable({ 
       "sDom": 'T<"clear">lfrtip', 
       "oTableTools": { 
        "sSwfPath": "includes/swf/copy_csv_xls_pdf.swf",     
        "aButtons": [ 
         { 
          "sExtends":"copy", 
          "mColumns":[{{datatable['flds']}}] 
         }, 
         { 
          "sExtends":"csv", 
          "mColumns":[{{datatable['flds']}}] 
         }, 

         { 
          "sExtends":"xls", 
          "mColumns":[{{datatable['flds']}}] 
         },       
         { 
          "sExtends": "pdf", 
          "mColumns":[{{datatable['flds']}}], 
          "sPdfOrientation": "landscape", 
          "sPdfMessage": "{{datatable['title']}}" 
         } 
        ] 
        },   
       "bProcessing": true, 
       "bServerSide": true, 
       "sAjaxSource": "{{datatable['source']}}", 
       "aoColumns": [   
         {% for column in 0..datatable['columns']-2 %} 
         null, 
         {% endfor %} 
         null 
       ] 

     }); 

是有办法的列表可以更新自己,每一次东西(UPDATE/INSERT/DELETE)发生到数据源? 我实现了一个循环丹尼建议,

var int=self.setInterval(function(){oTable.fnDraw();},1000); 

但问题是,列表始终是一个有趣的状态,看到attatched图像enter image description here

回答

2

你可以有一个环路上发生一个Ajax请求由一个间隔定时器来检查是否有新的数据,因为页面上次收到任何东西。你需要弄清楚你可以使用什么来确定相同数量的记录或保存上次更新/添加/删除的日期时间的专用记录,以及如果日期时间更新,那么当数据最后抓取时再次更新它等等。在页面上,您将记录/更新JavaScript var中最后一次数据更新的日期时间,以用于将来的所有检查。

+0

你能给我一个这个循环的例子吗?秒我不能使用记录计数,因为大部分更改是更新和更新不会更改记录计数。 – indago 2013-04-10 08:03:39

+0

@indago Ya可能会创建一个新的表或文件,以便在最后一次插入/更新/删除操作完成后用作检查。 – Danny 2013-04-10 08:06:41

+0

http://www.w3schools.com/jsref/met_win_setinterval.asp请记住,如果设置的时间间隔非常短,它可能会更快地更新,但如果您有很多用户,则会创建大量的http请求,可能也会很多,所以您需要根据用户流量和服务器统计信息来平衡服务器可以处理的时间间隔。 – Danny 2013-04-10 08:07:28

相关问题