循环返回JSON对象,为某些元素返回undefined

时间:2015-06-06 15:14:24

标签: javascript jquery json

posts.php中的我的JSON对象中,我有两个数组,postscomments。这是一个示例(posts仅适用于此示例,但comments有两个示例注释:

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时,所有其他变量都包含正确的信息。为什么呢?

3 个答案:

答案 0 :(得分: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;

这会导致得分和postid未定义,因为现在您将得分称为 comment.comment.score ,这是未定义的

答案 1 :(得分:0)

由于某种原因,javascript不喜欢变量名称"评论"在函数参数中,因为你使用它两次。 例如,如果将变量重命名为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;
})

答案 2 :(得分:0)

这种情况正在发生,因为您使用名为comment的同一变量用于不同目的。

var cmt = comment.comment;

语句

后作为对象访问comment的语句
var comment = comment.comment;

会抛出错误。

在循环内更改变量名注释,它将起作用。

DMEO here.