首页 > 解决方案 > 未捕获的 TypeError:data.forEach 不是 XMLHttpRequest.request.onload 的函数

问题描述

我试图与 api restcountries.eu 建立联系。我的 JavaScript 代码:

var request = new XMLHttpRequest()
var arr = []
request.open('GET', 'https://restcountries.eu/rest/v2/alpha/col', true)
request.onload = function () {
  // Begin accessing JSON data here
  var data = JSON.parse(this.response)

  data.forEach((countries) => {  
    arr.push(countries.name)
  })

  var selectBox = document.getElementById('test')
  for(var i = 0; i < arr.length; i++){
    selectBox.options.add(new Option(arr[i], arr[i]));
  }     
}
    
request.send()

我收到以下错误: Uncaught TypeError: data.forEach is not a function at XMLHttpRequest.request.onload 在我使用 foreach 函数的行上。我之前解析了数据,所以我没有得到它出错的地方。这个问题有解决方案吗?

标签: javascriptarraysjson

解决方案


如果要使用数据变量中项目的值,则应首先将值转换为数组。要获取对象值的数组,您可以执行以下操作:

Object.values(data).forEach(item=>{
    arr.push(item.name);
});

请记住,.forEach() 仅适用于数组。因此,只要您有一个值数组,就可以使用Object.values(yourObjectHere)它来获取其值的数组。我认为 bluejayke 提到Object.keys(yourObjectHere)返回其键(属性)的数组。


推荐阅读