在request.send()之后,是否必须始终创建一个新的请求obj?

时间:2019-01-03 19:30:18

标签: javascript api request

我想通过使用pokeapi创建一个pokedex。前20个神奇宝贝存储在http://pokeapi.salestock.net/api/v2/pokemon/中,接下来的20个存储在http://pokeapi.salestock.net/api/v2/pokemon/?offset=20 40,60 ...中,依此类推。 所以我的问题是我只能将前20个或后20个宠物小精灵推入阵列。我认为问题出在请求obj。 那么如何将第一个151 Pokemon推入阵列呢?

var allPages= [20,40,60,80,100,120,140];
var request = new XMLHttpRequest();
var allPokemon =[];

function firstPage(){
request.open('GET', 'http://pokeapi.salestock.net/api/v2/pokemon/', true);
request.onload = function () {
    var data= JSON.parse(this.response);
    for(var i=0; i<20; i++){
    allPokemon.push(data.results[i].name);
    }
};
request.send();
}

function remaining(){
    for (var i=0;i<allPages.length;i++){
        var url = "http://pokeapi.salestock.net/api/v2/pokemon/?offset="+allPages[i];
        request.open('GET', url, true);
        request.onload= function(){
            var data = JSON.parse(this.response);
             for(var j=0; j<20; j++){
                 allPokemon.push(data.results[j].name);
             }    
        };
    }
    request.send(); 
}
firstPage();
remaining();
console.log(allPokemon);

2 个答案:

答案 0 :(得分:0)

是的,您需要为发送的每个HTTP请求创建一个新的XMLHttpRequest对象。它不起作用的原因是,您尝试的第一个HTTP请求实际上只被发送。

答案 1 :(得分:-1)

您可以将限制设置为大于20。我不知道您可以获得的最大限制是多少,但是我可以看到即使是1000也不是限制,我不认为您希望此请求占用大量资源时间量。

http://pokeapi.salestock.net/api/v2/pokemon/?limit=“您的限制”