【问题标题】:Reading Data from a Javascript Array returns 'undefined'从 Javascript 数组中读取数据返回“未定义”
【发布时间】:2015-11-30 17:12:00
【问题描述】:

我正在尝试从我的 Javascript 数组对象中读取名为“MediaURL”的属性。下图显示了我的数组的展开视图:

我收到此错误:

未捕获的类型错误:无法读取未定义的属性“MediaURL”

这是我的代码:

    PageMethods.LoadFollowingTab(useremail, onSuccess, onFailure);

      function onSuccess(val) {

          var obj = JSON.parse(val); //this is the array object. I have logged it in console and it's not empty
          obj.forEach(function (value) {
          img1.src = value.Activities[0].MediaURL;
          //I am setting the MediaURL of the first element of the Array as the image source
       });
 }

这将返回该错误。我读错数组了吗?你觉得问题出在哪里?

编辑

我在 ASP.NET 的 C# 代码中使用 JavaScriptSerializer 将结果传递给 json:

[WebMethod]
 public static string LoadFollowingTab(string email)
 {
       string json = "";

            List<String> following = PBC.LoadFollowingTab(email);

            var jsonSerialiser = new JavaScriptSerializer();
            json = jsonSerialiser.Serialize(following);

            return json;
 }

遗憾的是,生成的字符串很长,我不能在这里发布。我认为我发布的数组视图就足够了吗? :)

【问题讨论】:

  • 可能是,您正在尝试获取 MediaURL,在您的 obj 来自异步操作之前,您可以发布更多代码吗?部分初始化obj。请注意,当您在控制台中展开它时,chrome 控制台评估对象,而不是在控制台中实际打印时。
  • 实际上这是不可能的,因为这发生在 onSuccess 函数内部。请检查我的编辑@Andrey
  • 能否请您发布您的返回 JSON 信息? obj 的内容。
  • 是否所有六个数组元素都有一个至少包含一个元素的Activities 数组?
  • @Grimbode 什么魔法!有用。请将其发布为答案并请解释一下:)

标签: javascript html arrays json


【解决方案1】:

您访问obj 的方式似乎是正确的,但我不禁注意到您的评论:

我将数组第一个元素的 MediaURL 设置为 图片来源

您似乎只对获取第一个值的第一个 MediaURL 感兴趣。

obj[0].Activities[0].MediaURL;

现在之前的问题是什么?您正在循环您的对象,但是在获得 MediaURL 后您忘记了离开循环。您只是继续循环并遍历每个对象,用下一个 MediaURL 替换您的 img1.src(如果它曾经存在的话)...

obj.every(function (value) {
          img1.src = value.Activities[0].MediaURL;
          //I am setting the MediaURL of the first element of the Array as the image source
          return false;
});

很有可能当您继续循环您的 obj 列表时,您的 Activities[0] object 之一不存在。

当您尝试访问未定义(或不​​存在)的内容时,您会收到 typeError。

【讨论】:

  • 如果我想访问当前迭代变量的 MediaURL,它是我在 forEach 循环中所说的“值”,该怎么办?例如:value.Activities[0].MediaURL?由于你指定的方法需要指定具体的元素编号,我也想知道如何去获取当前迭代的MediaURL?
  • @Earthling 你的算法似乎是正确的,但是除非你给我一部分你解析的 JSON 返回数据,否则我永远无法确定。如果我有这些信息,我将能够测试您的代码并为您提供更好的答案。如果我现在给你答案,我只是猜测。
  • 我明白了。你能告诉我你的想法吗?那时我可以自己想出一个主意并着手解决。例如,您将如何编码?
  • 对不起,如果我误解了您的代码示例,但在 forEach 中返回 false 不会爆发。一个 forEach 不能被提前停止,除非你抛出异常。
  • @ste2425 你是对的。我在 $.each() 的 jQuery 模式下
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多