我在服务器端(nodejs)有这个代码:
socket.on('data', function(dt){
var rdata = dt;
var msg = JSON.parse(rdata);
broadcast(msg);
});
我也尝试过这种方式:var msg = JSON.parse(dt);
dt得到:
{"chat":"hey","nickname":"nick_name"} OR
'{"chat":"hey","nickname":"nick_name"}'
此外,我在客户端(AS3)有这个,尝试了两个:
var msg = JSON.stringify({nickname: nname.text, chat: input_txt.text}); OR
var msg = "'" + JSON.stringify({nickname: nname.text, chat: input_txt.text}) + "'";
这就是控制台给出的:
undefined:1
{"chat":"hey","nickname":"nick_name"}
^
SyntaxError: Unexpected token
DEBUG: Program node app exited with code 8
同样在其他一些情况下,它会提供各种信息。
根本不知道发生了什么。 BTW,也试过JSONStream,仍然无法正常工作。
答案 0 :(得分:0)
你正在使用什么样的插座?如果您使用的是websocket,则可能已经收到了一个对象作为响应(我认为大多数框架都是这样做的)。如果您使用的是plain net.socket,则可能会收到缓冲区或块中的数据,而不是一次性收到。对于这种情况,这似乎是一个合适的解决方法:
var buffer;
socket.setEncoding('utf8');
socket.on('data', function(data) {
buffer += data;
});
socket.on('end', function() {
var object = JSON.parse(buffer);
});
答案 1 :(得分:0)
数据字符串末尾的意外标记是一些不是空格的重影符号。 trim()不起作用,因此要将最后一个symbor子串。这是AS3符号,所以我们必须保留它。首先,将此符号保存在新变量中。你从线上擦掉这个符号。之后,您可以解析字符串。与之合作。
undefined:1
{"chat":"hey","nickname":"nick_name"}
^
SyntaxError: Unexpected token
DEBUG: Program node app exited with code 8
当您使用它完成后,将对象字符串化,然后将鬼符号添加到末尾并通过套接字发送。如果没有此符号,AS3将不会解析数据。
我不知道为什么会这样,但这对我有用。