【问题标题】:how to constantly update the datatables when records change in the database, a websockets or long polling implementation如何在数据库、websockets 或长轮询实现中记录更改时不断更新数据表
【发布时间】:2013-04-01 22:55:54
【问题描述】:

我在 webapp 上使用数据表作为我的网格。问题是,用户必须始终刷新页面才能从数据库中获取当前数据,有没有办法可以自动完成?因为多个应用程序写入同一个表,而 webapp 只是用于监控,但如果用户必须刷新页面才能获取当前数据,则它超出了目的。 这是我的初始化代码:

  $('.{{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
                ]

        });

有没有办法在每次数据源发生任何事情(更新/插入/删除)时更新列表? 我已经按照 Danny 的建议实现了一个循环,

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

但问题是列表总是一个有趣的状态,见附图

【问题讨论】:

    标签: jquery websocket datatables long-polling phpwebsocket


    【解决方案1】:

    您可能有一个 ajax 请求,该请求通过一个间隔计时器在循环中发生,该计时器检查自页面上次接收到任何内容以来是否有新数据。您需要弄清楚可以使用什么来确定记录的数量或保存上次更新/添加/删除的日期时间的专用记录,如果日期时间较新,那么上次抓取数据的时间再次更新等. 在页面上,您将在 javascript var 中记录/更新上次数据更新的日期时间,以用于所有未来的检查。

    【讨论】:

    • 你能给我一个这个循环的例子吗?其次,我不能使用记录计数,因为大多数更改都是更新,并且更新不会更改记录计数。
    • @indago Ya 可能会创建一个新表或文件,以存储最后一次插入/更新/删除完成时用作检查。
    • w3schools.com/jsref/met_win_setinterval.asp 请记住,如果您设置的时间间隔非常低,它可能会更新得更快,但如果您有很多用户,它会创建很多 http 请求,可能太多,所以您需要根据用户流量和服务器统计信息等,平衡服务器可以处理的时间间隔。
    • 有没有办法在没有循环的情况下完成此任务?因为您说的 http 请求可能很疯狂,同一列表中可能同时有 100 多个用户!
    • 我不这么认为,网络仍然是“无状态的”,因此您需要不断地来回通信以打破无状态环境,这意味着大量请求。尝试将循环间隔设置为您希望有人在手动刷新页面之前等待的最长合理时间。您始终可以使用间隔数字并监控服务器负载以获得良好的平衡。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多