Javascript 未捕获的TypeError:data.forEach不是XMLHttpRequest.request.onload上的函数
我试图与api restcountries.eu建立联系。 我的javascript代码:Javascript 未捕获的TypeError:data.forEach不是XMLHttpRequest.request.onload上的函数,javascript,arrays,json,Javascript,Arrays,Json,我试图与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
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()
var-request=new-XMLHttpRequest()
var arr=[]
request.open('GET','https://restcountries.eu/rest/v2/alpha/col",对)
request.onload=函数(){
//从这里开始访问JSON数据
var data=JSON.parse(this.response)
数据.forEach((国家)=>{
arr.push(国家/地区名称)
})
var selectBox=document.getElementById('test'))
对于(变量i=0;i
我收到以下错误:未捕获类型错误:data.forEach不是函数
在使用foreach函数的行上的XMLHttpRequest.request.onload处。
我以前分析过数据,所以我不知道哪里出错了。
这个问题有解决方案吗?URL上的数据
https://restcountries.eu/rest/v2/alpha/col
不是数组,而是JavaScript对象。如果你想用forEach遍历它的属性,你必须在解析的数据上调用类似Object.keys
或Array.from的东西,比如
Object.keys(data).forEach((k) => {
arr.push(data[k].name)
})
如果要使用数据变量中项目的值,则应首先将值转换为数组。要获取对象的值数组,可以执行以下操作:
Object.values(data).forEach(item=>{
arr.push(item.name);
});
请记住,.forEach()仅适用于数组。因此,只要有一个值数组,就可以使用Object.values(yourObjectHere)
来获取它的值数组。我认为bluejayke提到了Object.keys(yourObjectHere)
返回其键(属性)数组。您查询的是一个特定的国家,特别是哥伦比亚。我想你的目标是,根据国家列表创建一个选项列表。在这种情况下,您需要将请求url更改为https://restcountries.eu/rest/v2
以接收可以迭代的整个国家/地区列表。解析的数据是数组还是对象?你能为发布控制台输出吗。响应
?请使用调试器。在单步执行代码时,通过查看调试器中的变量,检查您对数据的假设是否成立。然后事情通常会变得更清楚。如果我看这个URL,我会看到响应是一个对象,而不是一个数组。您预期的结果是什么?URL返回一个对象,其中包含“哥伦比亚”的一个国家名称,那么,您希望在数组中获得哪些其他国家/地区/什么是arr
呢?结果应该是国家/地区的名称,显示在选择框中。array.from
不会对这些数据做任何有用的事。@cherrydt true如果它没有索引属性和长度,通常认为错误至少已经消失,但现在它在我的数组中返回了几次[object object],而不是国家名称,我还在做错事吗?@saderk edited,如果你不想要这些对象,你可以直接输入名称。如果你转到ops url,它会返回特定国家的有效负载。特别是ISO 3166-1 alpha-2国家/地区。For each将永远不会为op工作,因为他需要一个国家的集合,并且他特别询问哥伦比亚。