我遇到过socket.emit不会发送数组的问题。
当客户收到它时,它就完全是空的。
服务器端:
var connectedUserNames = new Array() ;
socket.on('USER_ONLINE', function(data){
connectedUserNames[socket.id] = data ;
console.log(data+' has connected.') ;
})
io.sockets.emit('CONNECTED_USERS', connectedUserNames);
客户方:
socket.on('CONNECTED_USERS', function(data){alert(data);
$('#connectedusers').attr('title', data) ;
})
这是NodeJS的错误吗?如果是这样,我怎么能解决这个问题?
答案 0 :(得分:5)
你的订单似乎很不合适。您在CONNECTED_USERS
事件之外的某个地方发出USER_ONLINE
,因此很可能不会填充数据。顺便说一句,你宣布一个Array
,但你像普通对象一样访问它。如果您不需要索引数组,则应该只创建一个简单的Object
var connectedUserNames = {};
或使用Array.prototype.push
,这在那里更方便
connectedUserNames.push( data );
尝试拉这条线
io.sockets.emit('CONNECTED_USERS', connectedUserNames);
进入USER_ONLINE
事件然后确定,您的客户端实际上会在某个时刻触发该事件,因此您的服务器可以对此做出反应。