【问题标题】:jQuery .each() always returns Cannot read property 'name' of undefinedjQuery .each() 总是返回无法读取未定义的属性“名称”
【发布时间】:2018-12-10 19:47:02
【问题描述】:

我正在尝试使用 jQuery .each() 方法列出搜索结果。不幸的是,它似乎总是输出undefined,即使我在我的数组中定义了它。

我的 JSON 如下所示:

{
     "count":2,
     "results":[
             {
                 "title":"AirMech\u00ae Arena",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 2",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 3",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
      ]
}

然后我尝试这样做:

$.each(results, function(index, value) {
    $("#search-results").append(value["results"]["name"]);
});

我试过value["results"][0]["name"]value[0]["results"]["name"]value[0]["results"][0]["name"]

无论我尝试什么,它似乎总是返回未定义的错误。

可能是什么原因?


更新代码

            $.each(results, function(index, value) {
                $("#search-results").append(value["title"]);
                alert(value["title"]); // alerts undefined
            });

【问题讨论】:

  • 结果不是数组
  • 您是否需要标题而不是姓名?结果没有任何名为 name 的键
  • 您没有名为name的属性!
  • 不仅如此,他的代码还在寻找results.results.name

标签: javascript jquery json each


【解决方案1】:

您的对象中没有 name 键。相反,您可能正在寻找title。此外,您在 results 上循环,所以 value 在您的每个函数中 results。没有results.results,所以它返回了undefined

更新为将您的对象分配给名为myObject 的变量。

var myObject = {
     "count":2,
     "results":[
             {
                 "title":"AirMech\u00ae Arena",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 2",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
             {
                 "title":"Game Title 3",
                 "releasedate":"2015-05-05T00:00:00Z",
                 "icon":""
             },
      ]
}

这应该适合你:

$.each(myObject.results, function(index, value) {
    $("#search-results").append(value.title); // <-- you have title not name
});

如果您想使用您使用的语法来获取密钥,这也可以:

$.each(myObject.results, function(index, value) {
    $("#search-results").append(value["title"]); // <-- you have title not name
});

查看工作演示:https://codepen.io/mccambridge/pen/pKYbWv

【讨论】:

  • 似乎这段代码按预期循环了两次但返回未定义,我已经用我使用的代码更新了我的问题
  • 这可能是您所说的方式。您的对象未分配给 var,因此请查看我的编辑和工作中的 codepen 演示。
  • 确实是问题所在,谜团已经解开!谢谢你:)
【解决方案2】:

我可以看到您的 Json 对象,如果您仔细阅读,您正在尝试访问键 results,然后在 results 下只有三个子键

  • 标题
  • 发布日期
  • 图标

我在其中找不到 Name 键,但是在访问时,您正在写:

value["results"]["name"]

如果对象中不存在键 name,您将如何访问该键?

如果您正在寻找标题:

results[0].title
results[0].releasedate
results[0]. icon

results[1].title
results[1].releasedate
results[1]. icon

我认为这会帮助你并帮助你理清逻辑。所以在你的循环中它将是:

$.each(results, function(index, value) {
    $("#search-results").append(value.title);
    $("#search-results").append(value.releasedate);
    $("#search-results").append(value.icon);
});

【讨论】:

  • @J.Doe 我没有在我的答案中添加循环,我现在已经更新了。想象你正试图遍历这些名称。你现在可以检查吗?我检查了一下,它打印了瓷砖。
  • 这些值似乎返回undefined。将其稍微调整为value.results.title 时,它会输出控制台错误,但是在使用您的示例时,它只会输出 undefined
  • @J.Doe 这是一个工作的 JSfiddle。 jsfiddle.net/xpvt214o/342591 如果您使用控制台,您将能够看到标题。
  • @J.Doe 我的回答和逻辑是正确的,但是您将其存储在不同的名称下,所以我只是想让您理解这个概念,很抱歉没有提供复制粘贴解决方案。但是,是的,mccambridge 做对了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2021-12-06
  • 2022-01-22
  • 2021-11-13
  • 2022-01-14
相关资源
最近更新 更多