获取json值时未捕获TypeError

时间:2017-12-07 08:51:22

标签: javascript jquery json

代码下方正在运行,但我正在

  

未捕获的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"
  }]
}

3 个答案:

答案 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);
     }
   });
});

&#13;
&#13;
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;
&#13;
&#13;