解析WebSocket接收到的JSON导致错误



我写了一个非常简单的测试应用程序,它创建一个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" called - JSON被解析,JS控制台显示一个对象。当第二个到达时,它输出到我的"日志",但JSON。解析失败,错误"Uncaught SyntaxError: Unexpected token ILLEGAL"。令我困惑的是,接收到的字符串是一个有效的JSON对象——我已经通过几个JSON验证器对它进行了测试。我甚至从我的"日志"中复制粘贴了它,把它放在一个单独的文件中,然后用$解析它。getJSON -它工作正常,没有错误。

浏览器:Chrome 13.0.782.112

任何想法都会有帮助。

谢谢。

ES5 spec http://ecma262-5.com/ELS5_HTML.htm#Section_15.12.1将JSON空白定义为tab, cr, lf或sp。Crockford的跳过空间使用以下代码:

        white = function () {
// Skip whitespace.
            while (ch && ch <= ' ') {
                next();
            }
        },

所以如果你在响应中有任何虚假的空字符或表单提要等,那么ES5 JSON解析将抛出错误,而Crockford版本则不会。

你应该这样做:

$.parseJSON( json );

查看更多信息:http://api.jquery.com/jQuery.parseJSON/

相关内容

  • 没有找到相关文章

最新更新