基本上,我正在用PHP制作一个websocket聊天应用程序,并制作了一个显示所有在线用户的div。但我的代码的问题是,当一个新用户进入房间时,他只能看到在他之后进入房间的用户的名称,而看不到在他之前输入的用户的姓名
例如,如果蝙蝠侠、小丑和罗宾分别进入房间,那么小丑可以看到罗宾的名字,但在用户列表中看不到蝙蝠侠的名字。这是我的代码:
客户端:
<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>');
}
};
解决这个问题的变通方法是什么?有什么想法吗?希望我说得有道理。
对于您当前的代码,就是这样
蝙蝠侠进入房间——脚本触发将当前用户添加到列表中——没有人在那里,所以没有添加任何内容。
小丑进入房间——脚本被触发,并被附加到击球手身上——但脚本已经触发,添加了击球手,所以小丑不知道击球手在那里。
脚本不会存储临时信息
即,如果您明确声明users=batman、robin、joker,脚本就会知道这一点。
但是,如果你启动一个脚本,并将它们存储在该脚本中的数组或类似内容中,那么脚本运行完的那一刻,它就会忘记你存储了什么。
希望这会有所帮助——只要记住"如果没有帮助,脚本就记不住我告诉他们的任何事情"——这会让你更明显地需要一个临时物品的存储机制。
希望有帮助,祝你好运!