javascript - 未捕获的 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 函数的行上。我之前解析了数据,所以我没有得到它出错的地方。这个问题有解决方案吗?
解决方案
如果要使用数据变量中项目的值,则应首先将值转换为数组。要获取对象值的数组,您可以执行以下操作:
Object.values(data).forEach(item=>{
arr.push(item.name);
});
请记住,.forEach() 仅适用于数组。因此,只要您有一个值数组,就可以使用Object.values(yourObjectHere)
它来获取其值的数组。我认为 bluejayke 提到Object.keys(yourObjectHere)
返回其键(属性)的数组。
推荐阅读
- php - 使用 MailGun API 验证电子邮件地址
- c++ - windows类型转linux
- python - 并行运行 openai-gym 环境
- php - 后退按钮后重新加载页面但保持滚动位置
- python - 反转从 int 转换的字符串时,不会打印结尾的 0
- swift - 如何比较两个字符串以查看一个是否大于另一个
- r - LOESS 置信区间线在 R 中看起来参差不齐(即不平滑)
- salesforce - 无法用 Lightning:navigation 或 force:navigateToSObject 替换“force:navigateToURL”
- python - Pandas Dataframe 根据条件通过前一个更新行值
- c++ - 指针和数组与指针和整数 C++