我试图阅读名为" MediaURL"来自我的Javascript数组对象。下图显示了我的数组的扩展视图:
我收到此错误:
未捕获的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;
}
遗憾的是,结果字符串很长,我无法在此处发布。我认为我发布的数组视图就足够了? :)
答案 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。