У меня есть длинная операция опроса, которая прекрасно отправляет новые объекты в виде 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.