JQuery - 如何使用每个循环JSON

时间:2016-07-28 15:28:30

标签: javascript jquery json

我已缓存从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;  

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

3 个答案:

答案 0 :(得分:2)

您当前使用它的方式,each将迭代cache['cat-'+cat]对象的每个属性,其中有两个属性datedata

因此,您的匿名函数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);
});