Parse JSON получил с WebSocket результаты по ошибке - PullRequest
3 голосов
/ 19 августа 2011

Я написал очень простое тестовое приложение, которое создает веб-сокет и анализирует полученные данные (сервер отправляет действительные данные 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: Неожиданный токен ILLEGAL». Меня озадачивает то, что полученная строка является допустимым объектом JSON - я проверил его через несколько валидаторов JSON. Я даже скопировал и вставил его из своего «журнала», поместил в отдельный файл и проанализировал с помощью $ .getJSON - и он работал нормально, без ошибок.

Браузер: Chrome 13.0.782.112

Любые идеи будут полезны.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

ES5 spec http://ecma262 -5.com / ELS5_HTML.htm # Section_15.12.1 определяет пробельные символы JSON как tab, cr, lf или sp. Скип-пространство Крокфорда использует следующий код:

        white = function () {

// Skip whitespace.

            while (ch && ch <= ' ') {
                next();
            }
        },

Таким образом, если в вашем ответе есть ложные нулевые символы или форм-каналы и т. Д., Анализ ES5 JSON выдаст ошибку, а версия Crockford - нет.

0 голосов
/ 22 августа 2011

Вы должны сделать:

$.parseJSON( json );

см. Это для получения дополнительной информации: http://api.jquery.com/jQuery.parseJSON/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...