从Javascript数组中读取数据会返回' undefined'

时间:2015-09-04 13:51:48

标签: javascript html arrays json

我试图阅读名为" MediaURL"来自我的Javascript数组对象。下图显示了我的数组的扩展视图:

enter image description here

我收到此错误:

  

未捕获的TypeError:无法读取属性' 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#Code Behind中的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;
 }

遗憾的是,结果字符串很长,我无法在此处发布。我认为我发布的数组视图就足够了? :)

1 个答案:

答案 0 :(得分:0)

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

  

我将Array的第一个元素的MediaURL设置为   图像来源

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

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

现在出现了什么问题?你正在循环你的对象,但你忘记了在获得MediaURL之后离开循环...你只是继续循环并通过每个对象替换你的img1.src与下一个MediaURL(如果它曾经存在)......

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的某个[ [ { "id": 1, "value": "400" }, { "id": 2, "value": "200" } ], [ { "id": 1, "value": "200" }, { "id": 2, "value": "100" } ] ] 不存在。

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