2

我会尽力解释这一点。但基本上在网站上,当您有一些动态内容(例如消息、通知等)时……您希望在消息到达后立即将这些信息呈现给用户。例如,向用户发送了一条新消息,在您的网站标题中显示一个带有计数的气泡。

这些天你几乎在每个网站上都能看到这些东西,我不确定实现这种功能的最佳方式。

我最初的想法是编写一些 ajax 调用,然后将其包装在一个setInterval调用中,以便每 30 秒左右请求一次。这里明显的问题是 a) 您必须等待 30 秒才能收到请求,并且 b) 您可能在一天内向服务器请求数百次而没有实际显示的新内容。

我的第二个想法是使用 EventListeners,因为它们似乎更理想,因为据我了解,它们仅在服务器告诉它某些内容时才发出请求。但我不是 100% 确定如何构建这样的东西。任何人都可以举出一个简单的例子或指出一些可以作为这样的基础的东西吗?

所以要澄清我想要做什么:

当发生新的事情(例如发送消息或创建通知)时,这将发送一个事件,事件侦听器拾取并更新页面上的某些内容,显示带有信息的小弹出窗口或更新气泡,例如Messages (2)

我将使用 CakePHP 和 jQuery 来实现它。所以任何具体的事情都会很棒......希望有人可以帮助我。

本质上,我是在询问 EventListener 与 setInterval 以及它如何与 ajax 调用一起工作......

4

1 回答 1

2

正如 Alex Ball 所建议的,您应该研究 COMET 编程技术,并查看这个问题的答案Simple comet example using php and jquery。没有真正的“简单”答案来实现您所要求的有效技术,但最有效的方法是使用 iframe。使用 iframe 将允许您与服务器(PHP 端)建立持久连接。在这里您将能够检查新消息(查询新消息),如果有,返回您的数据。您的 ajax 调用(成功函数)将处理此数据,然后再发回服务器。如果没有,那么您将不得不循环。同样,有效的 COMET 编程技术实施起来并不简单。不过,这里有一些有用的例子: http://www.webreference.com/programming/javascript/rg30/index.htmlhttp://www.zeitoun.net/articles/comet_and_php/start, setInerval 对聊天无效,也许是通知。

COMET 技术并非特定于 CakePHP。

于 2012-06-30T17:45:55.453 回答