Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Node和Socket.io,我试图传递一个简单的数组和I';我一无所获。我错过了什么?_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 使用Node和Socket.io,我试图传递一个简单的数组和I';我一无所获。我错过了什么?

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' });

我按照设计开发了一个带有socket和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;
  })
})
客户端:

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':[]}或类似的东西。

我还注意到我无法通过数组,它必须是一个对象。一旦我把两者都修好了,我就可以让它工作了。可能是巧合,但无论如何对我来说更好,现在我有了一个具有可用游戏的对象。请编辑您的答案以包含对服务器端代码的更改。我会尽快接受。如果您愿意,请随意更改。只是想在一个答案中接受对这两个问题的修复。嗨,将功能从客户端传递到服务器安全吗??您在生产中如何看待此解决方案?我还注意到,我无法传递数组,它必须是一个对象。一旦我把两者都修好了,我就可以让它工作了。可能是巧合,但无论如何对我来说更好,现在我有了一个具有可用游戏的对象。请编辑您的答案以包含对服务器端代码的更改。我会尽快接受。如果您愿意,请随意更改。只是想在一个答案中接受对这两个问题的修复。嗨,将功能从客户端传递到服务器安全吗??您如何看待生产中的此解决方案?