基本上我正在用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>');
}
};
解决此问题的解决方法是什么?有任何想法吗?希望我有道理。
答案 0 :(得分:0)
使用您当前的代码,这就是正在发生的事情
蝙蝠侠进入房间 - 剧本引发以将当前用户追加到列表中 - 没有人在那里,所以没有附加任何内容。
小丑进入房间 - 脚本被解雇并被附加到蝙蝠侠 - 但剧本已经解雇了添加蝙蝠侠,所以小丑不知道蝙蝠侠在那里。脚本不会存储临时信息
即。如果你明确声明用户=蝙蝠侠,罗宾,小丑 - 剧本知道这一点。
但是,如果您触发脚本并将其存储在该脚本中的数组或类似内容中,则脚本完成运行的第二个脚本会忘记您存储的内容。
希望有所帮助 - 只要记住'脚本不能记住我没有帮助就告诉他们的任何东西' - 它会让你更明显的是你需要临时存储机制。
希望有所帮助,祝你好运!