Javascript 使用HTTP GET请求返回的对象未定义

Javascript 使用HTTP GET请求返回的对象未定义,javascript,http,youtube,youtube-api,Javascript,Http,Youtube,Youtube Api,我正在发出GET请求,以便通过链接获取YouTube的视频数据对象。我想我不明白这里是当我console.log返回的请求被记录到浏览器控制台时 函数videoThumb(url){ var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=函数(){ if(xmlhttp.readyState==4&&xmlhttp.status==200){ var myArr=JSON.parse(xmlhttp.responseText)

我正在发出GET请求,以便通过链接获取YouTube的视频数据对象。我想我不明白这里是当我
console.log
返回的请求被记录到浏览器控制台时

函数videoThumb(url){
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var myArr=JSON.parse(xmlhttp.responseText);
//打印到控制台
console.log(myArr);
//每次调用返回的对象
返回myArr;
}
}
open(“GET”,url,true);
xmlhttp.send();
}
var obj=可视拇指(“https://www.googleapis.com/youtube/v3/videos?part=statistics&id=QIc00XImJmA&key=AIzaSyCC0R6ZmeHW0pXVQxE7RJPTt5_JvwTGwXA")

//obj应该已经从“videoThumb”返回了值
定义了
xmlhttp
范围之外的变量

函数videoThumb(url){
var r=false,
xmlhttp=新的XMLHttpRequest();
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
//更新变量响应
r=JSON.parse(xmlhttp.responseText);
}
}
open(“GET”,url,false);//将async更改为false以等待响应,尽管这很糟糕!
xmlhttp.send();
返回r;
}
var obj=可视拇指(“https://www.googleapis.com/youtube/v3/videos?part=statistics&id=QIc00XImJmA&key=AIzaSyCC0R6ZmeHW0pXVQxE7RJPTt5_JvwTGwXA");
//obj应该从“videoThumb”返回值

控制台日志(obj)函数videoThumb(url)未返回值,因此其未定义。如果您想获得xmlHttp对象,请在函数的底部添加一个return语句。在函数的底部是什么意思?如果我将其从事件回调中取出,则回调值为空。因为它应该在firedSee事件之后返回,所以您不应该在回调函数中
console.log
,而是将响应存储在返回obejct的变量中,这对于进一步的开发非常有用。当您更改console.log以返回变量值equaling
videoThumb
是未定义的时,示例并不意味着是生产就绪代码,它只是接受方法思想的指南。我建议阅读异步事件以及如何使用回调或承诺处理它们。