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

imp*_*335 3 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);
Run Code Online (Sandbox Code Playgroud)

客户端:

socket.on('CONNECTED_USERS', function(data){alert(data);
    $('#connectedusers').attr('title', data) ;
})
Run Code Online (Sandbox Code Playgroud)

这是NodeJS的错误吗?如果是这样,我怎么能解决这个问题呢?

jAn*_*ndy 5

你的订单似乎很不合适.你CONNECTED_USERSUSER_ONLINE事件之外的某个地方发射,所以很可能没有填充数据.顺便说一句,你声明了一个,Array但你像普通对象一样访问它.如果您不需要索引数组,则应该只创建一个普通数组Object

var connectedUserNames = {};
Run Code Online (Sandbox Code Playgroud)

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

connectedUserNames.push( data );
Run Code Online (Sandbox Code Playgroud)

试着拉这条线

io.sockets.emit('CONNECTED_USERS', connectedUserNames);
Run Code Online (Sandbox Code Playgroud)

进入你的USER_ONLINE事件,然后确保,你的客户端实际上在某个时刻触发了该事件,因此你的服务器可以对此作出反应.