Javascript 使用Node和Socket.io,我试图传递一个简单的数组和I';我一无所获。我错过了什么?
我按照设计开发了一个带有socket和node的简单聊天应用程序,现在我正尝试扩展该应用程序,让人们玩我编写的游戏,所以我想让人们列出可用的游戏,但我似乎无法通过从服务器到客户端的简单测试阵列 我将让代码自己说话: 相关服务器代码:Javascript 使用Node和Socket.io,我试图传递一个简单的数组和I';我一无所获。我错过了什么?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我按照设计开发了一个带有socket和node的简单聊天应用程序,现在我正尝试扩展该应用程序,让人们玩我编写的游戏,所以我想让人们列出可用的游戏,但我似乎无法通过从服务器到客户端的简单测试阵列 我将让代码自己说话: 相关服务器代码: var games = ["test"]; io.sockets.on('connection', function (socket) { socket.emit('message', { message: 'welcome to the chat' });
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;
})
})
客户端:
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 games,它总是一个空数组,在我的脑海中,它应该包含字符串“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':[]}代码>或类似内容。您正在使用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':[]}代码>或类似的东西。我还注意到我无法通过数组,它必须是一个对象。一旦我把两者都修好了,我就可以让它工作了。可能是巧合,但无论如何对我来说更好,现在我有了一个具有可用游戏的对象。请编辑您的答案以包含对服务器端代码的更改。我会尽快接受。如果您愿意,请随意更改。只是想在一个答案中接受对这两个问题的修复。嗨,将功能从客户端传递到服务器安全吗??您在生产中如何看待此解决方案?我还注意到,我无法传递数组,它必须是一个对象。一旦我把两者都修好了,我就可以让它工作了。可能是巧合,但无论如何对我来说更好,现在我有了一个具有可用游戏的对象。请编辑您的答案以包含对服务器端代码的更改。我会尽快接受。如果您愿意,请随意更改。只是想在一个答案中接受对这两个问题的修复。嗨,将功能从客户端传递到服务器安全吗??您如何看待生产中的此解决方案?