【发布时间】:2010-12-09 03:21:27
【问题描述】:
编辑 我检查了 jQuery 文档并使用 $.ajax 和指定的 json 数据类型返回一个评估的 javascript 对象,所以 eval() 不是这里的答案。无论如何我都知道,因为我能够解析单个 JSON 对象,而不是数组。问题是我通过它们的方式 $.each :)
我已按照语法在 jQuery 中按字母解析 JSON 数组,但由于某种原因它不起作用。我正在使用 $.ajax 获取数组,指定了正确的数据类型,并且在 Firebug 中可以看到我的 PHP 脚本的响应是 []。然而,当我尝试使用 $.each 遍历数组时,当我尝试 console.log 数组的各个部分时,我得到的只是未定义的值。这是我的 php 脚本制作和编码数组的地方:
if(mysqli_num_rows($new_res) > 0) {
$messages = array();
while($message_data = mysqli_fetch_assoc($query_res)) {
$message = array(
'poster' => $message_data['poster'],
'message' => $message_data['message'],
'time' => $message_data['time']
);
$messages[] = $message;
}
echo json_encode($messages);
} else if(mysqli_num_rows($new_res) == 0) {
$message = array(
'poster' => '',
'message' => 'No messages!',
'time' => 1
);
echo json_encode($message);
}
这是我的解析尝试:
var logged_in = '<?php echo $logged_in; ?>';
var poster = '<?php echo $_SESSION["poster"];?>';
$.ajax({
url: 'do_chat.php5',
type: 'post',
data: ({'poster':poster,'logged_in':logged_in}),
dataType: 'json',
success: function(data) {
$.each(data, function(messageIndex, message) {
console.log(parseInt($('#chatWindow :last-child > span').html())+' '+message['time']);
if((parseInt(message['time']) > parseInt($('#chatWindow :last-child > span').html()))) {
$('#chatWindow').append('<div class="poster">'+message['poster']+'</div><div class="message"><span>'+message['time']+'</span>'+message['message']+'</div>');
}
});
}
});
如果没有 $.each 函数,我可以成功解析单个 JSON 对象,但不能解析数组。这是我第一次使用 JSON 和 $.each,而且我对 jQuery 还很陌生,所以如果我的代码有丑陋的部分,请放轻松!
【问题讨论】:
-
您找到解决方案了吗?如果是这样,我建议选择一个答案:p
-
我还没有,没有。我编辑了,但没有得到进一步的回复。问题要么在于 PHP 编码 JSON 对象的方式,要么在于 $.each 语法。我 console.logged 响应数据,然后 eval()-ed 它和 console 记录它,我得到同样的东西,所以 eval 不是答案。