Question

J'utilise socket.io version 0.8.4

J'ai résumé mon problème comme suit.J'ai des données qui ressemblent à ceci:

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

J'envoie les données du serveur au client de cette façon:

socket.emit("data", data);

Du côté client, je reçois les données de cette manière:

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

La chose étrange est:

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 n'est qu'un tableau vide côté client.

Y a-t-il un bogue connu dans la sérialisation des tableaux json sur le formulaire dans prop2?

Merci d'avance

MODIFIER:

Problème résolu en utilisant cette solution de contournement:

data.prop1 = [];
data.prop1.push("man");
data.prop2 = {}; // <= Object instead of array
data.prop2["hey"] = "man";
Était-ce utile?

La solution

ECMA-262 à propos du JSON.stringify:

La représentation des tableaux inclut uniquement les éléments entre zéro et array.length – 1 inclus.Les propriétés nommées sont exclues de la stringification.

Les tableaux sont censés avoir des noms de propriétés numériques.Ainsi, lorsque le data.prop2 est transformé en JSON (dans lequel socket.io envoie les données, j'imagine), il n'obtient pas la propriété 'hey'.Si vous souhaitez utiliser des noms de propriétés non numériques, vous devez utiliser des objets au lieu de tableaux:

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"

Autres conseils

Malheureusement, Javascript ne fonctionne pas vraiment comme ça.

Consultez cet article , environ la moitiédescente.Cela explique le problème où vous essayez de définir data.prop2 ["hey"]="man";

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top