4

当用户想要添加或删除表中的一行时,我已经看到了很多tablesorter触发更新的示例,但我想看看它是否有可能重新加载整个行或 tbody 如果有变化数据库?

这就是我的想法,所以请让我知道这是否是一个好主意。

JAVASCRIPT 和 PHP 中的设置:

( _ MySQL)并获取 lastUpdate 并显示它)此 lastUpdate 信息(日期/时间)将保存在 VAR 中以供以后使用。

2.添加一个计时器,它将 ping 同一个 (.PHP) 页面,并将它的 lastUpdate 与我们在页面首次加载时获得的初始 lastUpdate 进行比较。

3.我们将每隔 x 秒(可能是 10 秒)持续 ping 一次,以嗅探数据库中 lastUpdate 的更改。

4.(比较):如果最初的 lastUpdate 值小于我们刚刚从数据库中得到的值,那么这意味着数据库的内容已经改变,它会做两种可能的事情之一。

从这一点开始,我想做的是:

选项 1:仅删除旧行并将其替换为更新的行。每行都有一个唯一的 ID,因此 javascript 也可以获取此 ID#,然后只需更新表中的该行。

或者

选项 2:删除当前 Tbody,然后用新数据重新加载整个 Tbody。

该表有很多行/列,并使用图像、hrefs 等等......所以每一行都是一个沉重的行,这就是为什么我想尽可能使用选项 1,但我不知道如何做这最后一部分!?

(与聊天程序不同)行不必按正确的顺序排列,只要我知道数据库中更新的 ID 是什么。

假设我们有一个地址簿,用户可以编辑/更新、添加、删除联系人和联系信息。现在我只想扫描更改,当发现更改时,发送该行的 ID 和数据数据库到通过ID匹配的表中的行,然后更新它或删除旧的并用新的替换它,但是如果在数据库中找不到该ID,则从表中删除该ID,因为它没有数据库中的时间更长。

所以我能遇到的唯一问题是,不止一个用户同时进行了更改(就像在确切的秒内),然后只有一个更新会显示。但我认为这可以通过检查数据库来绕过,如果有任何其他不同的 ID 具有确切的日期/时间,并且如果有然后更新它们。

非常感谢您阅读本文并感谢您为我提供的任何帮助。

4

2 回答 2

2

选项 1. 来回发送的数据更少。少渲染。

这就是我会做的:

有一个JSsetTimeout 函数来AJAX检查我的服务器端脚本/servlet/whatever。如果任何行与SQL查询匹配,我会通过JSON.

用我的 JSON 返回,我将解析每个JSON对象(表行),并用TR新数据替换相应的对象。

于 2013-07-18T16:15:28.693 回答
1

使用 WebSockets 和/或服务器推送。如果您有 1000 个客户端,那将是每秒 0.1*1000=100 个请求。我不确定您的服务器端是否可以接受。

当使用 websockets 或服务器推送时,在数据库更新事件(更新它的人应该抛出一个事件)时,服务器向客户端发送:

  • 数据库行的顺序(它们都有唯一的 ID)
  • 已更改的行

最好使用与 PHP 不同的东西来更新客户端。例如,Java Servlet。也许,仅用于更新客户端数据库行的任务,我的意思是,您可以保留初始 PHP 页面。

回答@compcobalt:简化,你通过websockets接收两种数据类型。

  • JSON编码数组
  • 包含表格行的 XML 文档

这是数组:[47,27,1001,36,4,833,5,98,478,...]。该数组以正确的顺序包含所有数据库行的 ID 。正确的顺序可以是例如数据库中的行的顺序。javascript 现在立即修改 html 表以对应于该顺序。即使之前有第 26 行,现在数组中没有这样的行,javascript 也会删除它。

<tr data-id="47">...</tr><tr data-id="27">...</tr><tr data-id="1001">...</tr>

即使 JS 不知道 row#1001 或 row#27 是否已更新。然后,它获取 XML 文档(或 JSON,或您喜欢的任何格式)并解析它。

在这里,它获取更新行#27 和新行#1001 的内容,并用内容填充表格行。

然后,开始等待新的服务器推送。

于 2013-07-18T16:18:58.237 回答