Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的TypeError:data.forEach不是XMLHttpRequest.request.onload上的函数_Javascript_Arrays_Json - Fatal编程技术网

Javascript 未捕获的TypeError:data.forEach不是XMLHttpRequest.request.onload上的函数

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

我试图与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()
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工作,因为他需要一个国家的集合,并且他特别询问哥伦比亚。