我正在尝试使用jQuery从头开始构建一个网络聊天。我现在可以成功地向我的(也是自建的)API发送消息,现在我想要轮询新消息。我这样做是使用下面的功能。问题是我似乎无法对返回的json做任何事情。我尝试了JSON.parse()
和jQuery.parseJSON()
,但似乎都没有。完全没有警报弹出。当我使用简单的alert("with a simple string here");
时,它确实有用,所以它确实达到了成功点。
function updateConversation(){
if(!instance) {
instance = true;
$.ajax({
type:"POST",
contentType: "application/json",
accepts: "application/json; charset=utf-8",
url: "/api/support/" + "1",
data: JSON.stringify({
'action': 'GET_MESSAGES',
'user_id': user_id,
'last_message_id':last_message_id
}),
dataType: "json",
success: function(data) {
var usingjsonparse = JSON.parse(data);
alert(usingjsonparse.messages);
var usingjqueryparse = jQuery.parseJSON(data);
alert(usingjsonparse.messages);
if (data.text) {
for (var i=0; i< data.text.length; i++) {
$('#conversation').append($("<P>"+ data.text[i]));
}
}
document.getElementById('conversation').scrollTop = document.getElementById('conversation').scrollHeight;
instance = false;
// last_message_id = data.id;
}
});
} else {
setTimeout(updateConversation, 1000);
}
}
我期待的是json:
{"messages": [{"is_supporter": True, "text": u"aergaerg", "id": 1, "created": "1391609527"}, {"is_supporter": True, "text": u"eargaerg", "id": 2, "created": "1391609551"}, etc.]}
有人知道如何查看返回的原始数据字符串吗?我尝试了data
,data.messages
,data.messages[0]
以及其他数十种变体,但无济于事。当我alert(typeof(data));
时,我得到object
。
有人知道我在这里做错了什么吗?欢迎所有提示!
PS。有没有人知道一种更简单的方式来看待最新情况,而不是总是警告一切?
答案 0 :(得分:0)
问题1:
你有:
dataType: "json"
这告诉jQuery忽略服务器所说的响应,并将其视为JSON。它将解析它并将其转换为对象。
然后你有:
var usingjsonparse = JSON.parse(data);
将对象转换为字符串(例如"[Object object]"
)并尝试将其解析为JSON,而不是。{/ p>
您应该做的是让服务器返回适当的内容类型(application/json
),而不是提及JSON.parser
而不提及dataType
。
问题2:
{'messages': [{'is
...不是JSON。 JSON字符串必须由"
个字符分隔。你也有其他一些错误。它看起来像一个字符串化的Python对象。在将其发送到浏览器之前将其推送通过JSON序列化程序。
有人知道如何查看返回的原始数据字符串吗?
原始字符串将通过网络选项卡中的浏览器开发人员工具显示。
您可以看到console.log(data)
传递给函数的内容。