我已缓存从Ajax调用返回的JSON,需要循环显示它以显示它。我收到错误,“无法读取属性”标题'undefined'。有人可以帮忙吗?
$.each(cache['cat-'+cat], function(i, jd) {
var title= jd.title; //issue is here
)}
当我console.log(cache['cat-'+cat])
时,我得到以下内容:
Object {
date: "2016-07-28T15:08:03.596Z",
data: '[{"id":471,"title":"Lines and Calls","solution_areas":"lines-calls"}]'
}
当我在循环中调试console.log(jd)时,我得到以下内容:
2016-07-28T15:13:14.553Z
如果我使用console.log(jd.data);
,我会
未定义
我尝试过以下但是它们也不起作用:
var title= jd.data.title;
var title= jd.data[0].title;
谁能告诉我我做错了什么?
答案 0 :(得分:2)
您当前使用它的方式,each
将迭代cache['cat-'+cat]
对象的每个属性,其中有两个属性date
和data
。
因此,您的匿名函数function(i, jd)
将被调用两次。第一次,jd
将是date
属性(一个字符串)的值,第二次它将是data
属性的值(也是一个字符串,恰好发生在格式化为JSON)。
data
的内容在作为对象/数组访问之前需要进行解析,并且假设data
被格式化为数组,我猜你实际上想要迭代那。鉴于提供的示例,我将其更改为:
$.each(JSON.parse(cache['cat-'+cat].data), function(i, jd) {
var title= jd.title;
});
答案 1 :(得分:1)
您无法正常访问它。由于cache['cat-'+cat]
已经是必需的对象,$.each
的目的是什么?应该是
var title= JSON.parse(cache['cat-'+cat].data)[0].title;
(因为标题位于data
,而data
是JSON)。
演示:
var obj = {
date: "2016-07-28T15:08:03.596Z",
data: '[{"id":471,"title":"Lines and Calls","solution_areas":"lines-calls"}]'
};
var title= JSON.parse(obj.data)[0].title;
console.log(title);

答案 2 :(得分:0)
只需要了解什么是JSON以及什么是STRING
缓存[' cat - ' + cat] .data 返回一个字符串,在传递给每个循环之前需要转换为JSON:
var dataCacheReturned = cache['cat-'+cat];
var objCache = dataCacheReturned.data; //Its return a string
objCache = JSON.parse(objCache); //Parse string to json
$.each(objCache, function(i, jd) {
var title = jd.title;
console.log(title);
});