2012-01-14 43 views
4

我使用socket.io版本0.8.4在node.js和socket.io中发送数组时发生错误

我已经将我的问题归结为以下内容。我有数据看起来像这样:

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"; 

回答

6

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" 
+0

谢谢!然后它工作正常:) – 2012-01-14 21:50:36

1

不幸的是,JavaScript并没有真的这样做:

问题使用此解决办法来解决。大约一半的时候,退房this article。它解释了你尝试设置data.prop2的问题[“hey”] =“man”;

相关问题