NodeJS Socket.IO不会将数组传递给客户端

时间:2012-09-18 10:28:51

标签: javascript jquery node.js socket.io

我遇到过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的错误吗?如果是这样,我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:5)

你的订单似乎很不合适。您在CONNECTED_USERS事件之外的某个地方发出USER_ONLINE,因此很可能不会填充数据。顺便说一句,你宣布一个Array,但你像普通对象一样访问它。如果您不需要索引数组,则应该只创建一个简单的Object

var connectedUserNames = {};

或使用Array.prototype.push,这在那里更方便

connectedUserNames.push( data );

尝试拉这条线

io.sockets.emit('CONNECTED_USERS', connectedUserNames);

进入USER_ONLINE事件然后确定,您的客户端实际上会在某个时刻触发该事件,因此您的服务器可以对此做出反应。