J'ai un message de serveur envoyé via des sockets Web. ce message est une chaîne json (validée). quand il arrive au navigateur je vérifie que c'est une chaîne avec typeof(data)
et il me dit que c'est, en fait, une chaîne. Quand finalement je fais var some_obj = eval('(' + data + ')');
il me donne une erreur Uncaught SyntaxError: Unexpected token ILLEGAL
.Y a-t-il une différence entre les chaînes entre guillemets simples/doubles passées à eval de javascript?
également, avant d'utiliser eval()
, i console.log(data)
et il affiche correctement, bien qu'un alert(data)
n'affichera rien sur la boîte de dialogue.
Je n'arrive pas à comprendre ce qui se passe.
J'ai également essayé var myJson = '{ "x": "Hello, World!", "y": [1, 2, 3] }';
puis var myObj = eval('(' + myJson + ')');
et cela fonctionne, donc je ne peux vraiment pas comprendre pourquoi le mien ne peut pas être évalué (analysé).
la chaîne reçue via les sockets web est la suivante:
received 37 bytes » { "cmd": "setname", "params": "ok" }
où data = { "cmd": "setname", "params": "ok" }
(avec des guillemets, je suppose, en raison de typeof(data)
être = string).
des conseils? merci
edit1 »avec web-sockets, vous devez ajouter un caractère nul (0 ascii) et ajouter un caractère d'échappement (255 ascii) à la chaîne de sortie du serveur. Je suppose que le client (navigateur) comme il implémente web-sockets doit faire face à cela et déplier la chaîne correctement (comme le standard) et comme je le fais dans mon serveur. chose est, il pourrait y avoir un échappement char gauche et il ne traite pas correctement. mais le problème a seulement commencé quand j'ai essayé d'envoyer des chaînes JSON pour être eval() ed. sinon, ils fonctionnent correctement comme toute autre chaîne.
Vous devez comprendre que les guillemets au début (et à la fin) sont seulement là pour vous et l'analyseur pour comprendre où une chaîne commence (et se termine). Ils ne font pas partie de la chaîne elle-même. – ZeissS
Êtes-vous ** sure ** 'typeof (data)' est 'String'? Vous ne mentionnez pas 'console.log' ceci. Je pense que vous obtiendriez le beaviour que vous décrivez si les données étaient un objet littéral et non en fait une chaîne. – Day
typeof (d) »chaîne. Uncaught SyntaxError: jeton inattendu ILLEGAL. il y a en fait quelque chose de drôle qui se passe »quand j'essaie de copier depuis la console, le 'd' (chaîne) avec du texte avant, il ne copie pas ...» console.log ('received' + d.length + 'bytes »'+ D); c'est la commande log et elle génère »37 octets reçus» {"cmd": "setname", "params": "ok"} mais je dois l'écrire manuellement car je ne suis pas capable de le copier! – mwm