Javascript 返回未定义的XMLHttpRequest

Javascript 返回未定义的XMLHttpRequest,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我试图通过我的函数发送此HTTP请求,但无论发生什么情况,它都返回未定义 这是一个非常基本的要求,我不明白为什么会发生这种情况 如果我将URL复制并粘贴到浏览器中,它就会工作并显示所需的JSON 我在浏览器的控制台上使用随机id和api键尝试了这个函数,但仍然返回未定义的值 function getSummary(id){ let url2=`https://api.spoonacular.com/recipes/${id}/summary?apiKey=${key}`; let

我试图通过我的函数发送此HTTP请求,但无论发生什么情况,它都返回未定义

这是一个非常基本的要求,我不明白为什么会发生这种情况

如果我将URL复制并粘贴到浏览器中,它就会工作并显示所需的JSON

我在浏览器的控制台上使用随机id和api键尝试了这个函数,但仍然返回未定义的值

function getSummary(id){
    let url2=`https://api.spoonacular.com/recipes/${id}/summary?apiKey=${key}`;
    let xhr2=new XMLHttpRequest();
    xhr2.responseType='json';
    xhr2.onreadystatechange=()=>{
        if(xhr2.readyState==XMLHttpRequest.DONE){
            return xhr2.response;
        }
    }
    
    xhr2.open('GET',url2);
    xhr2.send();
}

您在arrow函数内部使用return语句,但它不会从main函数中返回

xhr2.onreadystatechange=()=>{
  //returns out of this function ^
  if(xhr2.readyState==XMLHttpRequest.DONE){
    return xhr2.response;
  }
}
您不需要创建函数来返回响应文本,而是需要使用响应文本作为参数运行函数:

let url2=`https://api.spoonacular.com/recipes/${id}/summary?apiKey=${key}`;
let xhr2=new XMLHttpRequest();
xhr2.responseType='json';
xhr2.onreadystatechange=()=>{
  if(xhr2.readyState==XMLHttpRequest.DONE){
       //seperate function
       run(xhr2.response);
    }
  }    
xhr2.open('GET',url2);
xhr2.send();

function run(text){
  console.log(text);
};

我按照API文档的指示将其包含在url中,同样:在浏览器的url栏中粘贴url会返回所需的结果,但函数中的http请求不会