用户无法查看在他之前输入的用户名称(websocket PHP)



基本上,我正在用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,脚本就会知道这一点。

但是,如果你启动一个脚本,并将它们存储在该脚本中的数组或类似内容中,那么脚本运行完的那一刻,它就会忘记你存储了什么。

希望这会有所帮助——只要记住"如果没有帮助,脚本就记不住我告诉他们的任何事情"——这会让你更明显地需要一个临时物品的存储机制。

希望有帮助,祝你好运!

相关内容

  • 没有找到相关文章

最新更新