2011-07-13 201 views
3

你好, 我有一個非常惱人的問題,我的解析函數。我從我的websocket服務器收到一個JSON字符串(我確定它是)。我在線驗證了它,但在使用我的腳本解析時仍然出現「無效標記」錯誤。JSON無效令牌

但是,如果我手動放入函數,一切都很完美。我的字符串有什麼問題?

function parseSocketMsg(msg){ 
     var obj = jQuery.parseJSON(msg); 
     $.each(obj, function(i, item){ 
      var rec = getRect(item.id); 
      rec.x = item.x; 
      rec.y = item.y; 
     }); 
} 

function connect(){ 
    var host = "ws://localhost:8080/scrabble/server.php"; 
    try{ 
     socket = new WebSocket(host); 
     print("Connected. Awaiting Handshake..."); 
     socket.onopen = function(msg){ 
      if(!ctx){ 
       init(); 
      } 
      print("Connection established - status "+this.readyState); 
     }; 
     socket.onmessage = function(msg){ parseSocketMsg(msg.data); }; 
     socket.onclose = function(msg){ print("Connection Lost! Reconnecting..."); connect(); }; 
    } 
    catch(ex){} 
} 
+2

你可以發佈一個示例JSON字符串嗎? –

+0

嘗試通過使用螢火蟲的console.log或簡單的警報記錄自己的輸入。 – TJHeuvel

+0

這是收到的:[{「id」:7,「x」:637,「y」:151},{「id」:23,「x」:672,「y」:151},{ ID:10,「x」:733,「y」:416}] – Nokus

回答

4

最近有一個類似的問題,問題是在字符串的開始和結尾有一個意外的空字符。

我建議您在十六進制中轉儲您正在解析的內容的確切內容,但視覺檢查並不總是顯示字符數據中的奇怪。

+0

ymmd,在開始的時候還有一個額外的字符,把所有東西搞砸了。謝謝! – Nokus

0

您有var host = "ws://...這可能是問題嗎?你確定你收到任何東西嗎? (日誌/打印/無論你得到什麼)。我想你正在讀取服務器中的日誌,並假設你的js正在獲取它。

+0

我把它打印在瀏覽器上,直接複製回js中,才發現它與我收到的不一樣。它也可以工作0.o – Nokus

+0

事實上,WebSockets需要採用'ws://'格式 – pimvdb