Pregunta

Yo uso Socket.io versión 0.8.4

He reducido mi problema a lo siguiente. Tengo datos como esto:

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

Envío los datos del servidor al cliente de esta manera:

socket.emit("data", data);

En el lado del cliente recibo los datos de esta manera:

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

Lo extraño es:

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 es solo una matriz vacía en el lado del cliente.

¿Existe un error conocido en las matrices de serialización de JSON en el formulario en PROP2?

Gracias de antemano

EDITAR:

Problema resuelto con esta solución:

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

Solución

ECMA-262 sobre JSON.stringify:

La representación de matrices incluye solo los elementos entre cero y array.length – 1 inclusivo. Las propiedades nombradas se excluyen de la Ctringificación.

Se supone que las matrices tienen nombres de propiedades numéricas. Entonces cuando el data.prop2 se transforma en JSON (que Socket.io envía los datos, imagino), no obtiene el 'hey' propiedad. Si desea usar nombres de propiedad no numéricos, debe usar objetos en lugar de matrices:

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"

Otros consejos

Desafortunadamente, JavaScript realmente no funciona así.

Verificar Este artículo, aproximadamente a la mitad. Explica el problema en el que intenta establecer data.prop2 ["hey"] = "hombre";

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top