当我使用Gmail时,即使我没有刷新页面,我收到的一些新邮件也会出现在收件箱中。我相信会在Ajax中完成。
有没有与它非常相似的好演示?定期检查并获取JSON数据(我不确定它是否是JSON数据..)来获取新数据?
谢谢!
答案 0 :(得分:7)
定期刷新的问题在于,虽然对某些不太时间关键的事情(如电子邮件提取)有好处,但它不是即时的。因此,您不希望将它用于聊天之类的事情,即等待甚至五秒钟的响应时间过长。您可以减少轮询间隔并在一秒或甚至半秒内发出请求,但随后您的浏览器会快速过载并浪费资源。
对此的一个解决方案是使用称为ajax长轮询的技术(被其他人称为'comet'或'reverse ajax')。使用这种技术,浏览器会产生一个持续时间很长的ajax请求,这个请求在有新数据可用之前不会返回。该请求位于服务器上(您需要运行特殊的服务器端软件以可扩展的方式处理此问题,但您可以将其与PHP一起作为演示进行处理)直到新数据可用,此时它将返回到客户端新数据。当客户端收到数据时,它会在服务器上发出另一个长轮询请求,直到有更多数据。我相信这是gmail使用的方法。
这是长轮询的要点,你必须进行一些修改,因为大多数浏览器如果在很长一段时间后没有返回就会过期ajax请求,所以如果ajax请求超时,则客户端必须生成另一个请求(但超时通常是一分钟或更长的时间间隔)。但这是主要的想法。
服务器端实现比客户端复杂得多(客户端只需要几行js)。
答案 1 :(得分:1)
虽然我不确定gmail的确切实现,但AjaxPatterns网站很好地概述了他们配音定期刷新: - > http://ajaxpatterns.org/Periodic_Refresh。我一直把这种风格称为心跳。
他们解决方案的要点是:
浏览器会定期发出 XMLHttpRequest Call 以获取新信息,例如每五秒一个电话。该解决方案利用浏览器的事件安排功能,提供了一种让用户了解最新更改的方法。
它们包含一些指向实际示例和一些示例代码的链接。