我正在玩jQuery解析JSON而我遇到了麻烦。我想检查JSON对象中'time'的值。这是我的试用功能:
$.ajax({
url: 'do_chat.php5',
type: 'post',
data: ({'message':'','poster':poster,'logged_in':logged_in}),
dataType: 'json',
success: function(data) {
$.each(data, function(interval, message) {
if(message['time']) {
$('#chatWindow').append('<p>hi</p>');
}
});
}
});
从我的服务器返回的字符串如下所示:
{“poster”:“”,“message”:“没有留言!”,“时间”:1256084677}
我不确定$ .each的语法。我正在使用PHP对JSON字符串进行编码,该字符串起源于php assoc数组。我确信我的错误很多,非常感谢任何帮助!
编辑:跟进问题 - 如何让PHP生成JSON数组?目前我使用它来生成单个对象:
$messages = mysqli_fetch_assoc($new_res);
$msg = $messages["content"];
$who = $messages["poster"];
$time = $messages["time_added"];
$message = array(
'poster' => $who,
'message' => $msg,
'time' => $time
);
echo json_encode($message);
但是,如果我从数据库查询中获取多行,我该怎么做?
答案 0 :(得分:2)
您的代码的问题在于您返回单个JSON对象{"poster":"","message":"No messages!","time":1256084677}
,但是您正在使用$.each
进行迭代。
$.each
需要一个数组,因为你没有返回数组,所以$.each
会循环遍历JSON对象的元素。
要修复代码,您需要确保服务器返回一个数组,例如:
[{"poster":"","message":"No messages!","time":1256084677}]
或
删除$.each
,以便您拥有:
$.ajax({
url: 'do_chat.php5',
type: 'post',
data: ({'message':'','poster':poster,'logged_in':logged_in}),
dataType: 'json',
success: function(data) {
if(data['time']) {
$('#chatWindow').append('<p>hi</p>');
}
}
});
答案 1 :(得分:0)
$.ajax({
url: 'do_chat.php5',
type: 'post',
data: ({'message':'','poster':poster,'logged_in':logged_in}),
dataType: 'json',
success: function(data) {
if (typeof data.time != 'undefined') {
$('#chatWindow').append('<p>' + data.poster + ' - ' + data.message + '</p>');
}
});
});
答案 2 :(得分:0)
我最终使用http://json.org中的JSON解析器:
$.ajax({
type: "POST",
url: "getData.asmx/retrieveSubcontractorList",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{}",
success: function(result2) {
var toolsData = JSON.parse(result2.d);
诀窍是数据实际上位于名为d
的属性中。