我正在建立一对一聊天室。
这是我的基本算法:
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});
});
错误说明:
我测试的内容:
socket.emit('getRoomInfo')
在错误描述3下被触发了两次,这意味着socket.on('receiveRoomInfo')
也被触发了两次。 因此,发生的情况是,“ Arya Stark”第一次被推送到列表中,第二次发现她已经存在于列表中,因此窗口仍会警告“用户已经存在!”。 / strong> 我研究了很多类似的问题,但没有一个与这个问题相同。
感谢帮助。
答案 0 :(得分:0)
我可以修复代码,但是我无法说出该错误的原因。
我发现在一次提交表单后,socket.on('receiveRoomInfo')
被触发了两次。
因此,我在var userExists=false
下设置了变量form.submit()
,
在检测到if(person_room[nickname])
之后,设置userExists=true
。
在socket.on('receiveRoomInfo')
下,用if(!userExists)
包围所有代码实现,以便我们可以确保socket.on('receiveRoomInfo')
在一次表单提交后仅执行一次。
我将等待几天才能提出更好的主意,然后再投票决定自己的答案。