在node.js和socket.io中发送数组时的错误

2024-01-03

我使用socket.io版本0.8.4

我将我的问题归结为以下几点。我的数据看起来像这样:

data.prop1 = [];
data.prop1.push("man");
data.prop2 = [];
data.prop2["hey"] = "man";

我通过以下方式将数据从服务器发送到客户端:

socket.emit("data", data);

在客户端我以这种方式接收数据:

socket.on("data", function(data){ console.log(data); });

奇怪的是:

data.prop1 = [];
data.prop1.push("man"); // This data exists in the client side data object
data.prop2 = [];
data.prop2["hey"] = "man"; // This data does not exist.

data.prop2 只是客户端的一个空数组。

prop2 中表单上的 json 序列化数组是否存在已知错误?

先感谢您

EDIT:

使用此解决方法解决了问题:

data.prop1 = [];
data.prop1.push("man");
data.prop2 = {}; // <= Object instead of array
data.prop2["hey"] = "man";

ECMA-262 关于JSON.stringify:

数组的表示仅包括零和之间的元素array.length – 1包括的。命名属性被排除在字符串化之外。

数组应该有数字属性名称。所以当data.prop2转换为 JSON(我想是 socket.io 发送数据的),它没有得到'hey'财产。如果你想使用非数字属性名称,你应该使用对象而不是数组:

data.prop1 = [];
data.prop1.push("man");
data.prop2 = {}; // Notice we're creating an object, not an array.
data.prop2["hey"] = "man"; // Alternatively: data.prop2.hey = "man"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在node.js和socket.io中发送数组时的错误 的相关文章

随机推荐