【问题标题】:How to refresh the Server or Database Table Values for every X Seconds如何每 X 秒刷新一次服务器或数据库表值
【发布时间】:2011-12-13 18:44:02
【问题描述】:

好的,我正在尝试制作一个聊天应用程序,如果用户登录到该网站,他们可以在其中互相聊天。除了一些我无法编​​写的工作之外,我已经设置了所有内容。

在我的示例中:2 个用户正在互相聊天:用户 A 和用户 B

当用户 A 在聊天窗口中提交评论时,包含评论的整个 div 不仅应该在用户 A 一侧刷新,而且在用户 B 一侧刷新,这样当用户 A 提交评论时,用户 B 应该能够看见了。

简而言之,当向数据库表中添加新记录时,刷新每个用户页面上的 div。

我擅长 PHP、Jquery、AJAX。

【问题讨论】:

  • 简而言之,你们一定知道 facebook 的实时通知是如何工作的。每次用户做某事。一条新记录被添加到实时通知 div 中。并且在某个状态下,如果有人cmet,即使他没有刷新页面,另一方的用户也会立即看到评论。它与“如果添加新记录则刷新 div”有关。但是经过长时间的编码后,我无法达到这种效果。 P.S:我需要一个简单的 Ajax + PHP 代码。因为我确定它很小,但我无法得到结果。

标签: php jquery ajax


【解决方案1】:

每隔 x 秒使用 Ajax 检查新消息,如果有新消息,则将其写入 div。

服务器无法告诉客户端发布了新消息。客户端必须询问服务器。

【讨论】:

  • 简而言之,你们一定知道 facebook 的实时通知是如何工作的。每次用户做某事。一条新记录被添加到实时通知 div 中。并且在某个状态下,如果有人cmet,即使他没有刷新页面,另一方的用户也会立即看到评论。它与“如果添加新记录则刷新 div”有关。但是经过长时间的编码后,我无法达到这种效果。 P.S:我需要一个简单的 Ajax + PHP 代码。因为我确定它很小,但我无法得到结果。
【解决方案2】:

如果您愿意将用户限制在新技术上,最好的办法是研究 HTML5 websocket API。鳃周围还是有点绿,但这肯定是在不久的将来做这些事情的方式。 Kaazing 的默认示例实际上是一个聊天客户端。

在服务器端,有 JavaScript (Node.js)、Java 和其他技术中的 websockets 实现,但我不确定 PHP。

如果您不想使用 websockets,请研究名为“COMET”的技术或搜索“long polling”。这些将比时间间隔更具响应性。

另一方面,如果您不需要它具有超级响应能力,则可以使用 setInterval 让两个客户端轮询服务器以进行更改。

【讨论】:

  • 简而言之,你们一定知道 facebook 的实时通知是如何工作的。每次用户做某事。一条新记录被添加到实时通知 div 中。并且在某个状态下,如果有人cmet,即使他没有刷新页面,另一方的用户也会立即看到评论。它与“如果添加新记录则刷新 div”有关。但是经过长时间的编码后,我无法达到这种效果。 P.S:我需要一个简单的 Ajax + PHP 代码。因为我确定它很小,但我无法得到结果。
  • 很难描述看到相同的评论复制+粘贴在每个答案中是多么烦人。 ;-) 我们都给了你有效的答案。在 setInterval 调用中发出您的 Ajax 请求(例如,每 1000 毫秒?)以获得资源密集型但快速的响应时间。没有奇迹……只有 websockets 提供与服务器的双工通信。其他一切都是轮询服务器以获取新数据的巧妙变体。
  • 我真的为 cop + paste 感到抱歉,但你应该明白我对自己没有做到这一点有多么恼火。很抱歉打扰你:)
  • 好的,我已经了解了 ajax 推送的工作原理。但没有得到关于它的教程。并想知道如何在服务器端编写脚本。我知道 facebook 是如何从这里完成的 [link]facebook.com/note.php?note_id=496077348919[link]
【解决方案3】:

如果您正在寻找 AJAX 轮询解决方案,DC 的回答是正确的。这可以通过一个简单的 JavaScript 间隔来完成。

但是,轮询对资源的要求并不高,因为会有很多重复的内容请求 - 您需要经常轮询以使聊天感觉像是实时的。

如果您想将数据从服务器推送到客户端,我会考虑使用 Web 套接字编写此应用程序。 NodeJS 非常适合您想要实现的目标,具体取决于您想要支持的浏览器。

【讨论】:

  • 简而言之,你们一定知道 facebook 的实时通知是如何工作的。每次用户做某事。一条新记录被添加到实时通知 div 中。并且在某个状态下,如果有人cmet,即使他没有刷新页面,另一方的用户也会立即看到评论。它与“如果添加新记录则刷新 div”有关。但经过长时间的编码后,我无法达到这种效果。 P.S:我需要一个简单的 Ajax + PHP 代码。因为我确定它很小,但我无法得到结果。
【解决方案4】:

你需要一个这样的超时函数:

 function updateChatWindow(){
    var xhr = $.ajax({
       url : /* controller url */,
    })
    .done(function(response){
       /** do something with the response the server gave you back **/
    });
     .fail(function(response){
      /** handle a lost connection is some way, maybe show a message to the user, or retry request */
    })
    .then(function(){
        periodicRefresh();
    });
 }


var timeoutFunction; //idealy, this will be inside a javascript object
//starts a refresh (in 500ms)
function periodicRefresh(){
    timeoutFunction = setTimeout(updateChatWindow,500);
}
//stops the refresh from happening, see below why
function clearRefresh(){
    clearTimeout(timeoutFunction);
}

var inputElement = $(/** the input area where the user types text **/);
inputElement.keyup(function(e){
    if(e.keyCode==13){ // or whatever the e.???==13 was to check for enter
        clearRefresh();
        /** submit new chat line **/
        updateChatWindow();
});

updateChatWindow();

回顾:

1) 有一个将更新窗口的 ajax 调用
2) 有一个计时器函数,它将在其中存储一个超时变量,该变量将触发内容的刷新(来自 1 的 ajax 调用)
3) 能够取消该请求(因为用户输入文本,并且在他们按下回车后,无论如何您都应该刷新聊天窗口)
4) 有能力以某种方式停止超时功能以允许 3) 发生。

【讨论】:

  • 简而言之,你们一定知道 facebook 的实时通知是如何工作的。每次用户做某事。一条新记录被添加到实时通知 div 中。并且在某个状态下,如果有人cmet,即使他没有刷新页面,另一方的用户也会立即看到评论。它与“如果添加新记录则刷新 div”有关。但经过长时间的编码后,我无法达到这种效果。 P.S:我需要一个简单的 Ajax + PHP 代码。因为我确定它很小,但我无法得到结果。
  • 上面的代码做了更新的ajax部分。从数据库获取数据以及发送数据的方式是 PHP 端的基本 SQL 和 JSON,并且取决于设计。 div 更新部分是一个简单的 jQuery 选择和操作。我在这里向您展示的是聊天窗口“实时”刷新所需的实际 UI 流程。其余部分由您决定。
猜你喜欢
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2016-09-21
  • 2014-06-01
  • 2019-03-09
  • 2016-01-23
相关资源
最近更新 更多