2014-03-02 30 views
0

我有這樣的代碼在服務器端(的NodeJS)錯誤:JSON.parse(DT)不會在所有的工作,讓所有能想象

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 

此外,在一些其他情況下,給出了各種消息。

只是不知道發生了什麼事情。 順便說一句,也試過JSONStream,仍然無法正常工作。

回答

0

意外的原因,是一些鬼符號,它不是一個空白。 trim()不起作用,所以對最後的symbor工作進行子串處理。這是AS3符號,所以我們必須保留它。首先將這個符號保存在新變量中。你從行中刪除這個符號。之後,您可以解析字符串。與它一起工作。

undefined:1 
{"chat":"hey","nickname":"nick_name"} 
            ^
SyntaxError: Unexpected token 
DEBUG: Program node app exited with code 8 

完成時使用它,字符串化的對象,再加入鬼符號到底,送過來的插座。沒有這個符號,AS3將不會分析數據。

我不知道這是爲什麼,但這對我有用。

0

你正在使用什麼樣的套接字?如果你使用的是websocket,你可能已經收到了一個對象作爲響應(我認爲大多數框架都這樣做)。如果你使用普通的net.socket,你可能會收到一個緩衝區或數據塊,而不是一次。這似乎是對這種情況適當的解決辦法:在數據字符串的結尾

var buffer; 
socket.setEncoding('utf8'); 
socket.on('data', function(data) { 
    buffer += data; 
}); 
socket.on('end', function() { 
    var object = JSON.parse(buffer); 
}); 
+0

我使用require(「net」),看來我得到一個緩衝區,當我console.log(dt)我得到** **所以它關閉並收到所有數據。如果我以原始格式將消息發送到API,我也會得到JSON字符串而不會丟失任何東西。 ** {「chat」:「hey」,「nickname」:「nick_name」}或者 '{「chat」:「hey」,「nickname」:「nick_name」}'**還必須保持連接活。 – ValRus