【发布时间】:2018-09-18 16:32:07
【问题描述】:
我正在创建一个一对一的聊天室。
这是我的基本算法:
- 通过表单接受用户输入(昵称)
- 从服务器获取所有现有连接和房间
- 检查此昵称是否已存在:
如果存在,表单提交return false;如果不存在,......
现在我在 第 2 步遇到了 socket.emit() 两次错误。
这是我的客户端代码:
$('#login').submit(function(e){
socket.emit('getRoomInfo');
socket.on('receiveRoomInfo',function(info){
//Here has some code to fetch person_room list from server.
//e.g, person_room[nickname]= roomNO
if(person_room[nickname]){
alert('User already exists!');
}else{
//show chat
//hide the form
//update person_room list
//do something
}
});
return false;
});
这是我的服务器端代码:
socket.on('getRoomInfo',function(){
socket.emit('receiveRoomInfo', {'person_room': person_room, 'roomNO': roomNO});
});
错误说明:
- 假设我打开一个表单 (index.html),输入“John Snow”,然后提交表单。一切正常,表格被隐藏,聊天出现。等待 另一个连接...
- 然后我打开另一个表单(index.html),输入“John Snow”,提交表单。窗口提示“用户已存在!”。未提交表单。
- 我删除“John Snow”并输入“Arya Stark”,然后提交表单。窗口仍然警报 “用户已经存在!”,但这一次,表单被隐藏,聊天显示 向上。
我测试过的内容:
- 登录表单只提交一次
- 在客户端,
socket.emit('getRoomInfo')在错误描述 3 下被触发两次,这意味着socket.on('receiveRoomInfo')也被触发两次。 所以发生的情况是,“Arya Stark”第一次被推入列表,第二次发现她已经存在于列表中,因此窗口仍然提醒“用户已经存在!”。
我研究了很多类似的问题,但没有一个与这个问题相同。
感谢您的帮助。
【问题讨论】: