2012-01-14 70 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」;

相關問題