2011-10-18 15 views
5

将鼠标悬停在Stackoverflow上的标签上时,会出现如下所示的工具提示。这可能是通过jquery.append实现的,因为它在HTML文档的最后插入了HTML代码。 在每次悬停事件后,经过一段时间的延迟,发出AJAX请求, - 可能通过jquery.load(...)我如何获得Stackoverflow/Stackexchange - 就像标签悬停工具提示一样?

发送到webapps.stackexchange.com的url查询是例如_ = 1318962590136,这是一个动态的ID。

  • 1)这是如何工作在客户端和服务器端,有什么好处?

用于toolip有效载荷是HTML,看起来像这样:

<div><div class="tm-heading">...</div></div><span>.......</span> 

在离开标签,所述动态加载HTML被去除。 css样式已经存在于加载的stackoverflow站点的css表单中。

  • 2)最初声明的事件似乎没有附加到构成标签的样式化的链接元素<a>。似乎只声明了mousedown事件(通过Chrome进行检查)。

JavaScript的DeObfuscator是给一些线索:事件侦听器的动态添加和删除,以及...

function (a, b, c) { 
    a.removeEventListener && a.removeEventListener(b, c, !1); 
} 

enter image description here

回答

2

通过仅当用户触发悬停更新数据事件,这意味着您不必每隔数秒就不断查询数据库。这种方法完全浪费资源,特别是当您需要极其最新的信息时,可能每秒钟都会调用服务器。

但是这样做的一个更好的方法(甚至比你在你的问题中讨论的方法更好)是一种叫做Comet的方法。简单来说,Comet意味着客户端向服务器发出请求,然后等待服务器响应(即当服务器上的数据更新时)。这意味着服务器只有在更新数据被推送到客户端时才被调用。这是(我相信)Facebook如何工作的例子。

相关问题