无法使用jQuery解析JSON

时间:2009-10-21 00:28:25

标签: jquery ajax json

我正在玩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);

但是,如果我从数据库查询中获取多行,我该怎么做?

3 个答案:

答案 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的属性中。