2011-06-26 134 views
3

我从一个$.ajax({ POST.....jQuery访问JSON对象?

[{"total_votes":1,"options":[{"id":40,"vote_count":0,"users":[]},{"id":41,"vote_count":1,"users":[{"photo":"xxxxxxxxxxx.png","name":"XXXXX,"id":1}]},{"id":42,"vote_count":0,"users":[]}]}] 

以下回来,我试图让total_votes有:

success: function(e) { 
     console.log(e['total_votes'])  
    } 

也试图得到

 console.log(e['options'].length()) 
     console.log(e['options'][0]['id']) 

建议为什么我不断收到未定义?还有更好的方法来循环选项?

感谢

+0

您排除了某些重要的细节,从你的' $ .ajax()'方法。你是否将'dataType:'属性设置为''json'?如果没有,它是否从服务器发送正确的头文件? – user113716

+0

@AnApprentce,我认为你的Json格式不正确。你可能需要使用firefox中的firbugs来检查返回的类型。 – tkt986

回答

8

你的根对象是一个数组,所以你需要做的是这样e[0]['total_votes']。此外,数组的长度不是一个函数其属性,所以你会想要做e[0].options.lengthe[0]['options'].length

+0

仍未定义 – AnApprentice

+1

@AnApprentice:如果解析了JSON,则可用:http://jsfiddle.net/fkling/aJNCm/。解析它或设置dataType:'json'。 –

+0

数据被解析为json还是字符串?如果在选项部分中设置dataType:“json”,会发生什么? (请参阅http://api.jquery.com/jQuery.ajax/) –

0

您需要取消引用JSON对象

1

之前调用JSON.parse根据您的示例JSON响应(这是一个数组)这将是e[0].total_votes

+0

仍未定义 – AnApprentice

+0

@AnApprentice:您确定将'dataType'定义为'“json”吗? – Ryan

0

格式化乌尔的Json这样,你就可以得到这样

success: function(e) { 
    console.log(e[0].total_votes); 

} 

[ 
    { 
     "total_votes": 1, 
     "options": [ 
      { 
       "id": 40, 
       "vote_count": 0, 
       "users": [] 
      }, 
      { 
       "id": 41, 
       "vote_count": 1, 
       "users": [ 
        { 
         "photo": "xxxxxxxxxxx.png", 
         "name": "XXXXX", 
         "id": 1 
        } 
       ] 
      }, 
      { 
       "id": 42, 
       "vote_count": 0, 
       "users": [ 
        {} 
       ] 
      } 
     ] 
    } 
] 

检查“total_votes”值了here