Допустимый объект JSON или JavaScript для анализа - PullRequest
0 голосов
/ 11 декабря 2011

У меня есть длинная операция опроса, которая прекрасно отправляет новые объекты в виде JSON, но при получении обновлений, возвращающих объект, кажется, что существует недопустимый объект JavaScript, который я не могу разобрать с jQuery и так как это недопустимый объект JavaScript, в который я не могу попасть. Вот console.log Я получил с обновлением:

{'body': 'hello world', 'html': '\n<div class="message" id="md1f1cdab-3c3a-4dfe-b268-834aa9981dec"><b>burakdede: </b>hello world</div>\n', 'from': 'burakdede', 'id': 'd1f1cdab-3c3a-4dfe-b268-834aa9981dec'}

До того, как ответ получен, я использую eval("(" + response + ")"), чтобы включитьэто в объект JavaScript.Шоу-сообщение используется как для публикации нового сообщения, так и для получения обновлений.Он отлично работает с новой публикацией, но выдает ошибку при получении ответа.

var updater = {
    errorSleepTime: 500,

    poll: function() {
        var args = {"_xsrf": getCookie("_xsrf")};
        args.listing_id = $(".action").attr("id");

        $.ajax({url: "/a/message/updates", type: "POST", dataType: "text",
                data: $.param(args), success: updater.onSuccess,
                error: updater.onError});
    },

    onSuccess: function(response) {
        try {
            updater.newMessages(eval("(" + response + ")"));
        } catch (e) {
            updater.onError();
            return;
        }
        updater.errorSleepTime = 500;
        window.setTimeout(updater.poll, 0);
    },

    onError: function(response) {
        updater.errorSleepTime *= 2;
        console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
        window.setTimeout(updater.poll, updater.errorSleepTime);
    },

    newMessages: function(response) {
        if (!response.messages) return;
        var messages = response.messages;
        //console.log(messages.length, "new messages, message is :", messages);
        updater.showMessage(messages);
    },

    showMessage: function(message) {
        var existing = $("#m" + message.id);
        if (existing.length > 0)return;
        var node = $(message.html);
        node.hide();
        $("#inbox").append(node);
        node.slideDown();
    },
};

function newMessage(form) {
    var message = form.formToDict();
    var disabled = form.find("input[type=submit]");
    disabled.disable();

    $.postJSON("/a/message/new", message, function(response) {
        updater.showMessage(response);
        if (message.id) {
            form.parent().remove();
        } else {
            form.find("input[type=text]").val("").select();
            disabled.enable();
        }
    });
}

Вместо исправления на стороне клиента я исправил код на стороне сервера, и теперь он работает,Проблема заключалась в том, что он не мог произвести правильный JSON.

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Укажите dataType = 'json' вместо 'text'.jQuery обработает для вас неверный ответ.

0 голосов
/ 11 декабря 2011

Свойства объекта JSON должны быть заключены в двойные кавычки, чтобы быть действительными. Посмотрите на определение значение в http://json.org.

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