代码下方正在运行,但我正在
未捕获的TypeError:无法读取未定义的属性'searchname'
为什么我收到此错误消息?我不知道如何解决这个问题。
var selectedVal = "calendar";
$.getJSON("/js/datas.json", function(jsonData) {
for (var j = 0; j <= jsonData.nameSearch.length; j++) {
if (jsonData.nameSearch[j].searchname == selectedVal) {
var linkname = jsonData.nameSearch[j].namelink;
alert(linkname);
}
}
});
这是JSON:
{
"nameSearch": [{
"searchname": "calendar",
"namelink": "holidays"
}, {
"searchname": "date",
"namelink": "kilo"
}]
}
答案 0 :(得分:3)
您需要使用<
代替<=
。
<强> 原因: - 强>
因为jsonData.nameSearch
索引从0开始,如0,1,.....so on
当您使用jsonData.nameSearch.length
时,它会为您提供2。
所以循环将变为: -
for (var j = 0; j <= 2; j++) {
但jsonData.nameSearch
内的索引2根本不存在。所以你得到错误。
所以解决方案是 从循环中移除=
,如下所示: -
for (var j = 0; j < jsonData.nameSearch.length; j++)
答案 1 :(得分:1)
您需要从 for for循环中删除=
符号。
For循环应该是:
for (var j = 0; j < jsonData.nameSearch.length; j++)
答案 2 :(得分:1)
另一种方法可能是这样的。
function nameSearchIdx(jsonData, idx, checkValue) {
if (jsonData.nameSearch[idx].searchname === checkValue) {
var linkname = jsonData.nameSearch[idx].namelink;
alert(linkname);
}
}
var selectedVal = "calendar";
$.getJSON("/js/datas.json", function(jsonData) {
Object.getOwnPropertyNames(jsonData.nameSearch).forEach(function (val, idx, array) {
if(!isNaN(val)) {
nameSearchIdx(jsonData, idx, selectedVal);
}
});
});
var jsonData = {
"nameSearch": [{
"searchname": "calendar",
"namelink": "holidays"
}, {
"searchname": "date",
"namelink": "kilo"
}]
};
function nameSearchIdx(jsonData, idx, checkValue) {
if (jsonData.nameSearch[idx].searchname === checkValue) {
var linkname = jsonData.nameSearch[idx].namelink;
alert(linkname);
}
}
Object.getOwnPropertyNames(jsonData.nameSearch).forEach(
function (val, idx, array) {
if(!isNaN(val)) {
nameSearchIdx(jsonData, idx, "calendar");
}
}
);
&#13;