Javascript JQuery-如何使用每个

Javascript JQuery-如何使用每个,javascript,jquery,json,Javascript,Jquery,Json,我已经缓存了从Ajax调用返回的JSON,需要循环使用它来显示它。我得到错误,“无法读取未定义的”属性“标题”。有人能帮忙吗 $.each(cache['cat-'+cat], function(i, jd) { var title= jd.title; //issue is here )} 当我console.log(缓存['cat-'+cat])时,我得到以下信息: Object { date: "2016-07-28T15:08:03.5

我已经缓存了从Ajax调用返回的JSON,需要循环使用它来显示它。我得到错误,“无法读取未定义的”属性“标题”。有人能帮忙吗

 $.each(cache['cat-'+cat], function(i, jd) {               
    var title= jd.title;  //issue is here
  )}
当我
console.log(缓存['cat-'+cat])
时,我得到以下信息:

Object {
  date: "2016-07-28T15:08:03.596Z", 
  data: '[{"id":471,"title":"Lines and Calls","solution_areas":"lines-calls"}]'
}
2016-07-28T15:13:14.553Z
当我在循环中运行console.log(jd)时,我得到以下结果:

Object {
  date: "2016-07-28T15:08:03.596Z", 
  data: '[{"id":471,"title":"Lines and Calls","solution_areas":"lines-calls"}]'
}
2016-07-28T15:13:14.553Z
如果我使用
console.log(jd.data)我明白了

未定义

我尝试了以下方法,但也不起作用:

var title= jd.data.title;  
var title= jd.data[0].title;  

谁能告诉我我做错了什么吗?

您没有正确访问它。既然
缓存['cat-'+cat]
已经是所需的对象,那么
$的目的是什么。每个
?应该是

var title= JSON.parse(cache['cat-'+cat].data)[0].title;
(因为标题在
数据
中,而
数据
是JSON)

演示:

var obj={
日期:“2016-07-28815:08:03.596Z”,
数据:“[{“id”:471,“标题”:“线路和呼叫”,“解决方案区域”:“线路呼叫”}”
};
var title=JSON.parse(obj.data)[0].title;

控制台日志(标题)
按照您当前使用它的方式,
每个
都将迭代
缓存['cat-'+cat]
对象的每个属性,其中有两个属性,
日期
数据

因此,您的匿名函数
函数(i,jd)
将被调用两次。第一次,
jd
将是
date
属性的值(一个字符串),第二次它将是
data
属性的值(也是一个字符串,恰好格式为JSON)

data
的内容需要先进行解析,然后才能作为对象/数组进行访问,并且假设
data
的格式是数组,我猜您实际上希望对其进行迭代。根据提供的示例,我将其更改为:

$.each(JSON.parse(cache['cat-'+cat].data), function(i, jd) {               
    var title= jd.title;  
 });
只需要理解什么是JSON,什么是字符串

cache['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);
});

所以在
数据的值周围有引号
?在您的示例中有引号,因此需要再次对其进行分析,因为它只是一个字符串…我没有看到
数据之后的引号:
之前的引号
啊,是的,您是对的。我用过两次stringify。var cache={date:new date(),data:JSON.stringify(jd)};localStorage.setItem('cat-presentation-solution_areas-'+solutionarea,JSON.stringify(缓存));我错过什么了吗?请评论:)@Rory我正在解析
数据
属性,它是JSON,不是object。啊,是的,你是对的。我不知道那是干什么用的。在某些情况下,下一票仙女似乎是有效的数据将是一个数组,上面的示例只有一个对象。对不起,我应该提供一个更好的例子。迭代有什么意义?
data
@nicael中只有一个项-如果数据数组只包含一个对象,则没有对象。但考虑到它是一个数组(一旦解析),LeeTee很可能打算在某个时候用多个对象填充它。因此需要迭代。@ultrajohn-Where?lol,对不起,当然,这个JSON字符串会被解析成一个集合…@LeeTee这个答案确实为包含多个元素的数组提供了解决方案。