开发者问题收集

未捕获的类型错误:data.forEach 不是 XMLHttpRequest.request.onload 上的函数

2020-08-19
3371

我尝试与 restcountries.eu api 建立连接。 我的 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 不是函数 在 XMLHttpRequest.request.onload 中使用 foreach 函数的那一行。 我之前解析过数据,所以不知道哪里出错了。 这个问题有解决办法吗?

3个回答

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

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

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

RedBlazerFlame
2020-09-08

URL https://restcountries.eu/rest/v2/alpha/col 上的数据不是数组,而是 JavaScript 对象。如果您想使用 forEach 遍历其属性,则必须在解析的数据上调用 Object.keysArray.from 之类的方法,例如

Object.keys(data).forEach((k) => {  
  arr.push(data[k].name)
})


B''H Bi'ezras -- Boruch Hashem
2020-08-19

您正在查询特定国家/地区,具体来说是哥伦比亚。我认为您的目标是根据国家/地区列表创建一个选项列表。在这种情况下,您需要将请求网址更改为 https://restcountries.eu/rest/v2 以接收您可以迭代的完整国家/地区列表。

Brenden
2020-09-09