【发布时间】:2011-10-30 06:29:46
【问题描述】:
我编写了一个非常简单的测试应用程序,它创建一个 websocket 并解析它接收到的数据(服务器发送有效的 JSON 数据)。 问题是第一个JSON对象解析成功,但是后面的对象都解析错误。
所有代码如下:
$("#connect").click(function ()
{
socket = new WebSocket("my server address");
socket.onopen = function ()
{
$("#log").append("Connection opened.<br/>");
socket.send(/* login information goes here */));
};
socket.onerror = function (e)
{
$("#log").append("Error: " + e.data + "<br/>");
};
socket.onclose = function ()
{
$("#log").append("Connection closed.<br/>");
};
socket.onmessage = function (e)
{
$("#log").append(index.toString() + ": " + e.data + "<br/><br/>");
console.log("Parsing " + index);
index++;
var obj = JSON.parse(e.data);
console.log("Parsed:");
console.log(obj);
};
});
我得到的是:第一次调用“socket.onmessage” - 解析 JSON 并且 JS 控制台显示一个对象。当第二个到达时,它将它输出到我的“日志”,但 JSON.parse 失败并出现错误“Uncaught SyntaxError: Unexpected token ILLEGAL”。 令我困惑的是,接收到的字符串是一个有效的 JSON 对象——我已经通过几个 JSON 验证器对其进行了测试。我什至将它从我的“日志”中复制粘贴到一个单独的文件中并用 $.getJSON 解析它 - 它工作正常,没有错误。
浏览器:Chrome 13.0.782.112
任何想法都会有所帮助。
谢谢。
【问题讨论】:
-
也许您已经在服务器中设置了内容类型?那么数据就不需要更多的解析了。已经发生在我身上,白白发疯了一天
-
@pif hmm,我觉得这里不是这样,数据是通过websocket接收的。
-
啊好吧...在我的情况下无论如何我正在使用java servlet,然后设置 {response.setContentType("application/json")} 然后尝试像你一样解析它做并得到Unexpexted token error thingy。像你一样,我试图复制和粘贴浏览器正在获取的内容,它也是一个有效的 json。当我试图不解析它并访问数据时,它就像一个魅力。
-
您是否尝试过将“e.data”的输出(第一次和第二次尝试)并进行比较,可能会在此处发布。
-
@Sunday 我试过了。而且我确实相信这是一个错误,因为解决这个问题的方法是使用 JSON.parse 源代码,而不是实际调用 JSON.parse。您可以在这里查看“第二次更新” - stackoverflow.com/questions/7123908/…
标签: javascript json websocket