在posts.php
中的我的JSON对象中,我有两个数组,posts
和comments
。这是一个示例(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
时,所有其他变量都包含正确的信息。为什么呢?
答案 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;
会抛出错误。
在循环内更改变量名注释,它将起作用。