我关注了 net tuts tutorial用套接字和 Node 构建一个简单的聊天应用程序,现在我正在尝试扩展该应用程序以允许人们玩我编写的游戏,所以我想让人们列出可用的游戏,但我似乎做不到将一个简单的测试数组从服务器传递到客户端。
我会让代码自己说话:
相关服务器代码:
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 添加到代码库,即使教程遗漏了它。
最佳答案
您正在使用 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':[]};
或类似内容。
关于javascript - 使用 Node 和 Socket.io 我试图传递一个简单的数组,但我什么也没得到。我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18832402/