编辑我检查了 jQuery 文档并使用 $.ajax 和指定的 json 数据类型返回一个评估的 javascript 对象,所以 eval() 不是这里的答案。无论如何我都知道,因为我能够解析单个 JSON 对象,而不是数组。问题是 $.each-ing 我通过它们的方式:)
我已经按照语法在 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 还很陌生,所以如果我的代码有丑陋的部分,那就放轻松吧!