我跟着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到代码库,即使教程错过了它。
答案 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':[]};
或类似内容。