1

我已经尝试了几个月来断断续续地寻找解决方案,但甚至没有接近答案 - tbh 我什至不知道在搜索时使用什么关键字,我希望这里有人有答案或至少可以指出我应该寻找的方向。

在我的公司内,我建立了一个内部网页面,人们可以向该页面添加问题(很像帮助台票务系统)。用户可以在需要时向这些问题添加更新。因此我有两个数据库表(除其他外) - 一个有问题,另一个有这些问题的更新。

我已经建立了一个网站,它使用 jquery 的 ajax 请求来轮询数据库中所有当前未解决的用户桌面问题以及该问题的最新更新(如果有的话)。根据用户的偏好,这些会以更新或发布的顺序列出。

每隔 7 秒,整个 div 就会随着整个列表的刷新而更新。因此,如果我每次刷新浏览器页面的一半时突出显示某个问题中的某些文本,我就会失去该突出显示。这种刷新在我的服务器上也有很大的负载——如果每个人的浏览器每 7 秒不断刷新整个数据库的内容,那么数据库会占用很多时间。

我想做的是让浏览器只更新自上次刷新以来不同的项目。我已将其设置为在用户上次刷新视图时更新用户数据库,因此每 7 秒(如果他们正在查看首页)此字段会获得一个新的 unix 时间戳。我还有关于问题和更新的创建时间以及关于问题的更新时间戳(当为该问题创建新更新时,更新时间戳将使用新的 unix 时间进行更新)。

据我所知,这就是 Facebook 的新闻提要所做的。时不时地将新帖子添加到顶部,在旧帖子下添加对旧帖子的回复,更新新的喜欢和分享等等。如果我在我的 facebook 页面上突出显示某些文本,突出显示不会丢失,这意味着 facebook仅更新提要的部分内容,而不是整个提要本身。这就是我想要发生的事情。

你知道任何关于如何做这样的事情的教程吗?或如何搜索,因为当我搜索 facebook 类型的新闻提要系统时,我得到的只是如何与 facebook 的 API 交互!提前致谢。

4

1 回答 1

1

您可以尝试研究推送技术:

推送技术 - 长轮询

推送技术,尤其是长轮询在这种情况下可能很有用。这是手机应用程序在向用户或订阅者传输新数据或更新时使用的概念。在这种情况下,与服务器的连接保持活动状态。用户的机器偶尔会轮询服务器以获取新信息。但是,如果有新信息要提供给用户,服务器只会回答响应。在这种情况下,您可以每 7 秒轮询一次服务器,但在有新信息之前,服务器不会响应或重新绘制 div。

就更新 div 而言,您可以尝试使用 jquery .clone 和 .append 选项在其自己的跨度中添加每个新项目。

例如:

HTML:
<span id="itemX"></span>

On Ajax Success:
var tile = $('#itemX').clone().attr('id','item1').text("Text returned from ajax call.");
$('#divName').append(tile);

通过这种方式,您可以在 ajax 调用返回给您时修改每个新项目并将其附加到下方,而不会影响其上方的项目。

祝你好运。希望这可以帮助。

于 2012-09-18T21:04:57.430 回答