2015-06-06 104 views
1

在我的JSON對象posts.php我有兩個數組,postscomments。下面是一個例子(posts只是[...]在這個例子中,但comments有2個例評論:循環JSON對象返回undefined某些元素

posts.php

{ 
    "posts": [{ 
     ...   
    }], 
    "comments": [{ 
     "id": "1", 
     "submitter": "", 
     "time": "1433601171", 
     "comment": "example comment", 
     "score": "0", 
     "postid": "1" 
    }, { 
     "id": "2", 
     "submitter": "", 
     "time": "1433601211", 
     "comment": "another comment", 
     "score": "0", 
     "postid": "1" 
    }] 
} 

的Javascript:

$.getJSON('posts.php',function(data){ 
    data.comments.forEach(function(comment){ 
     var id = comment.id; 
     var submitter = comment.submitter; 
     var time = comment.time; 
     var comment = comment.comment; 
     var score = comment.score; 
     var postid = comment.postid; 

對於某些原因,當我alert(score)alert(postid)他們是undefined,但所有其他變量包含正確的信息。爲什麼?

回答

0

由於某種原因,javascript不喜歡函數參數中的變量名稱「comment」,因爲它使用了兩次。 例如,如果您將該變量重命名爲c,則該變量有效。

data.comments.forEach(function(c){ 
     var id = c.id; 
     var submitter = c.submitter; 
     var time = c.time; 
     var comment = c.comment; 
     var score = c.score; 
     var postid = c.postid; 
}) 
1

你有意見相同的變量名

//original comment variable points to commnet.comment 
var comment = comment.comment; 
//comment get overwrite from the original commnet 
//now comment points to comment.comment 
var score = comment.score; 
var postid = comment.postid; 

這將導致得分和對帖子ID是未定義的,因爲現在你是指得分comment.comment.score這是不確定的

0

發生這種情況的原因是您使用的變量名稱爲comment出於不同目的。

var cmt = comment.comment; 

語句聲明

var comment = comment.comment; 

後訪問comment爲對象將拋出錯誤。

更改循環內的變量名稱註釋,它將工作。

DMEO here.