【问题标题】:Impossible response of ajaxajax的不可能响应
【发布时间】:2013-12-01 16:03:08
【问题描述】:

我正在使用 AJAX、PHP 和 MySQL 开发一个网络聊天网站。

但是我遇到了一个问题,有一个功能可以检查与您聊天的人是否仍在聊天(在线)或他/她已放弃聊天。 函数如下所示:

//some variables here
var somedata="....";
var userleftchatmsg="he/she left you,you are alone now.";

function checkifuseronline(){
    $.ajax({
        type: "GET",
        url: "check.php",
        dataType: "json",
        data:somedata
    }).done(function(r) {
        if (r.o1==2) {   
            $("#chattable").prepend(userleftchatmsg);
        } else { 
            checkifuseronline();
        }
    }); 
}

问题是“他/她离开了..”消息有时会出现两次,尤其是当用户同时与多个伙伴聊天时。 这不应该是不可能的还是我错了?

【问题讨论】:

  • 什么是r?也许更新不够快?
  • 您将消息添加到 #chattable 元素,所以我不明白为什么它不能显示两次。如果您拨打checkifuseronline 两次并获得r.o1 == 2 两次,您将看到两次消息。
  • 也许如果你使用 setTimeout 函数再次调用 checkifuseronline 就像setTimeout('checkifuseronline()', 1000);
  • 你什么时候调用 checkifuseronline()
  • 这个函数会每秒用http调用轰炸你的服务器,直到用户离开?

标签: php mysql ajax


【解决方案1】:

您可能不喜欢这个答案,但请查看 XMPP。它旨在解决此问题,以及您尚未遇到的所有其他问题。 http://xmpp.org/about-xmpp/

另外,更直接的方法是使用 NodeJS 服务器来执行此操作: http://net.tutsplus.com/tutorials/javascript-ajax/real-time-chat-with-nodejs-socket-io-and-expressjs/

糟糕的答案是 PHP 不能做你想做的事。这是我一直使用的一种很棒的语言,但你不能从这里到达那里。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 2011-11-02
    • 2011-05-24
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多