是否有更有效的方法从.onload()函数中提取JSON数据?

问题描述 投票:1回答:1

我正在玩REST API只是为了更深入地了解它。我在过去几天一直在研究的是“如何从.onLoad()JSON响应中提取数据并将其分配给全局变量?”巧合的是,我找到了关于回调函数的文章。在我询问StackOverflow之前,我决定自己解决这个问题。这就是事情。

我启动了正常的程序来从星球大战API提供商处获取数据。然后我创建了一个函数,它将响应行星数据并将其分配给全局变量(如行星名称,气候和直径)。这些变量将是THREE.js中3Dobject的数据提供者,它将指示行为。我不想尝试将整个THREE.js代码放入.onload()函数中,因为我认为这会在以后造成很多混乱。瞧!现在我在全局变量中拥有了我想要的所有数据,我可以开始关注webApp的下一部分,但是......我所做的是解决这个问题最有效的方法吗? takeOut()函数还有那种回调函数吗?即使我没有将此作为.onload()函数的参数?就像request.onLoad(takeout)一样?

        //instance of request obj
        var request = new XMLHttpRequest;

        //open connection and GET data
        request.open("GET", "https://swapi.co/api/planets/2/", true);

        //working with data respond
        request.onload = function(){
            data = JSON.parse(this.response);
            return takeOut(data.name, data.climate, data.diameter);
        }

        //send a request for data
        request.send();


        //function to take out data from JSON response
        var name;
        var climate;
        var diameter;
        function takeOut(x,y,z){
            name = x;
            climate = y;
            diameter = z;
            return name, climate, diameter;
        }

我希望JSON响应将行星对象名称,气候和直径分配给全局变量作为另一个函数的数据提供者。拉出函数并将所有数据分配给var,但它是否有效?是否有更快,更少“耗时”的方法?我可以使用.onLoad()内部的XMLHttpRequest方法以某种方式执行此操作而不创建单独的函数,仅用于拉出并将数据分配给变量吗?

javascript json api
1个回答
2
投票

在你的代码中,takeOut实际上不是一个回调函数。回调函数是一个函数,它作为参数传递给另一个在调用范围上具有闭包的函数(因此访问调用范围中存在的变量)。

使其可重用并使用回调函数:

function retrieveData(cb){
 //instance of request obj
 var request = new XMLHttpRequest;

        //open connection and GET data
 request.open("GET", "https://swapi.co/api/planets/2/", true);

        //working with data respond
 request.onload = function(){
   data = JSON.parse(this.response);
   return cb(data);
 }

        //send a request for data
 request.send();
}

retrieveData(function(data){
  //access data.name; data.climate
})

© www.soinside.com 2019 - 2024. All rights reserved.