我有一个很长的轮询操作,可以将新对象作为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。
答案 0 :(得分:1)
指定dataType ='json'而不是'text'。 jQuery会为你处理一个无效的响应。
答案 1 :(得分:0)
JSON对象属性需要包含在双引号内才有效。查看http://json.org中值的定义。