在node.js和socket.io中发送数组时发生错误
我使用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序列化数组中有一个已知的错误?
先谢谢你
编辑:
使用此解决方法解决问题:
data.prop1 = []; data.prop1.push("man"); data.prop2 = {}; // <= Object instead of array data.prop2["hey"] = "man";
ECMA-262关于JSON.stringify
:
数组的表示只包含零和
array.length – 1
之间的元素。 命名的属性被排除在string化之外。
数组应该有数字属性名称。 所以当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"
不幸的是,Javascript并不是真的那样工作。
看看这篇文章 ,大概一半了。 它解释了你试图设置data.prop2的问题[“hey”] =“man”;