如何刷新每X秒的服务器或数据库表值

时间:2011-12-13 18:44:02

标签: php jquery ajax

好的我正在尝试创建一个聊天应用程序,用户可以在这里登录到网站时可以互相聊天。我已经设置了一切,除了一些我无法写的工作。

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

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

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

我很擅长PHP,Jquery,AJAX。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

但是,轮询对资源的影响不大,因为会有大量重复的内容请求 - 而且您需要经常轮询以使聊天感觉就像是实时的。

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

答案 3 :(得分:0)

你需要一个像这样的超时功能:

 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)有一个定时器功能,它将在其中存储一个超时变量,该变量将触发内容的刷新(ajax调用从1开始)
3)能够取消该请求(因为用户输入文本,并且在他们输入后,您应该刷新聊天窗口,无论如何)
4)能够以某种方式停止超时功能以允许3)发生。