使用Node和Socket.io我试图传递一个简单的数组,我什么都没得到。我错过了什么?

时间:2013-09-16 15:59:24

标签: javascript node.js socket.io

我跟着net tuts tutorial建立了一个带套接字和节点的简单聊天应用程序,现在我正在尝试扩展应用程序以允许人们玩我写的游戏,所以我想让人们列出可用的游戏,但我似乎无法通过一个简单的测试阵列从服务器到客户端。

我会让代码说明一切:

相关服务器代码:

var games = ["test"];
io.sockets.on('connection', function (socket) {
  socket.emit('message', { message: 'welcome to the chat' });
  socket.on('gameList', function (data) {
    io.sockets.emit("games",games);
  });
  socket.on('send', function (data) {
    io.sockets.emit('message', data);
  });
});

客户机侧:

window.games = [];
$("#listGames").click(function(){
  socket.emit("gameList", function(data){
    window.games = data;
  })
})

所以我在按钮点击之前和之后的console.log游戏,它总是只是一个空数组,在我的脑海中,它应该包含字符串"test"

那我哪里出错了?

注意: 添加了jQuery到代码库,即使教程错过了它。

1 个答案:

答案 0 :(得分:4)

您正在使用socket.emit()尝试接收数据。这只会将数据发送到服务器。您需要在客户端上使用games事件处理程序来相应地处理事件。

window.games = [];

$("#listGames").click(function() {
  socket.emit('gameList');
});

socket.on('games', function (games) {
  window.games = games;
});

games的事件处理程序是在服务器端执行io.sockets.emit('games', games);时触发的事件。

还要确保始终将对象作为响应通过Socket.IO传递。将服务器端代码从var games=[];更改为var games={'games':[]};或类似内容。