用户不能看到在他之前输入的用户名(websocket PHP)

时间:2014-04-12 10:33:36

标签: javascript php websocket

基本上我正在用PHP创建一个websocket聊天应用程序,我已经创建了一个显示所有在线用户的div。但是我的代码问题是当一个新用户进入房间时,他只能看到输入的用户的名字在他之后的房间,不能看到用户的名字be4他。

例如,如果 Batman,Joker和Robin 分别进入房间,那么Joker可以看到知更名,但无法在userList中看到蝙蝠侠的名字。 这是我的代码:

客户端:

 <div style="height:760px; width:200px; margin-left:450px;border-style:solid;"id='userlist'> 
  </div>

这是我需要用户列表的DIV元素。    

JS代码:

 var msg = {
    name: myname,
    color : '<?php echo $colours[$user_colour]; ?>'
    };
 websocket.send(JSON.stringify(msg));

然后服务器收到这些数据,并且是服务器侧码的一部分:

 $tst_msg = json_decode($received_text); //json decode 
 $user_name = $tst_msg->name; //sender name
 $response_text = mask(json_encode(array('name'=>$user_name)));
 send_message($response_text); //function to send data to the client side

现在接下来是接收数据的客户端边码:

websocket.onmessage = function(ev) {
  var msg = JSON.parse(ev.data); 
  var uname = msg.name; //user name
//code to check if same name doesnt appear twice
     if(!$('#userlist:has(li.'+uname+')').length>0){
     $('#userlist').append('<li class="'+uname+'" >'+uname+'</li>');
 } 
    };

解决此问题的解决方法是什么?有任何想法吗?希望我有道理。

1 个答案:

答案 0 :(得分:0)

使用您当前的代码,这就是正在发生的事情

蝙蝠侠进入房间 - 剧本引发以将当前用户追加到列表中 - 没有人在那里,所以没有附加任何内容。

小丑进入房间 - 脚本被解雇并被附加到蝙蝠侠 - 但剧本已经解雇了添加蝙蝠侠,所以小丑不知道蝙蝠侠在那里。

脚本不会存储临时信息

即。如果你明确声明用户=蝙蝠侠,罗宾,小丑 - 剧本知道这一点。

但是,如果您触发脚本并将其存储在该脚本中的数组或类似内容中,则脚本完成运行的第二个脚本会忘记您存储的内容。

希望有所帮助 - 只要记住'脚本不能记住我没有帮助就告诉他们的任何东西' - 它会让你更明显的是你需要临时存储机制。

希望有所帮助,祝你好运!