2017-11-18 166 views
1

我想获取https://swapi.co/api/people/所有名称和其他详细信息,但是当我使用axios调用来获取数据时,我得到undefined数据,但如果想要一个名称我在控制台中得到一个CORS错误。从Swapi API获取数据https://swapi.co/api/people/

let button = document.querySelector("#button"); 
let name = document.querySelector("#displayDetail"); 

function getDetail(){ 
    var apiURL="https://swapi.co/api/people"; 
    axios.get(apiURL).then(function(response){  
    showDetail(response.data); 
    });  
} 

function showDetail(data){ 
    name.innerText=data.name; 
}  

button.addEventListener('click',getDetail); 

回答

0

来自https://swapi.co/api/people的JSON数据没有name成员。相反,它有一个results成员,它是一个对象数组,每个成员都有一个name成员。

所以你需要遍历该data.results阵列来获得每个name

function getDetail() { 
 
    var apiURL = "https://swapi.co/api/people"; 
 
    axios.get(apiURL).then(function(response) { 
 
    showDetail(response.data); 
 
    }); 
 
} 
 

 
function showDetail(data) { 
 
    for (i = 0; i < data.results.length; i++) { 
 
    console.log(data.results[i].name); 
 
    } 
 
} 
 
getDetail();
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

但请注意:该API端点进行分页的结果;所以要得到所有的名字,检查data.next得到下一个页面的URL,然后进行与该URL的新请求,以获得下一组结果:

function getDetail(apiURL) { 
 
    axios.get(apiURL).then(function(response) { 
 
    showDetail(response.data); 
 
    }); 
 
} 
 

 
function showDetail(data) { 
 
    for (i = 0; i < data.results.length; i++) { 
 
    names = names + data.results[i].name + "\n"; 
 
    // name1.innerText = name1.innerText + "\n" + data.results[i].name; 
 
    } 
 
    if (data.next) { 
 
    getDetail(data.next); 
 
    } else { 
 
    console.log(names); // name1.innerText = names; 
 
    } 
 
} 
 
var names = ""; 
 
getDetail("https://swapi.co/api/people");
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

+0

谢谢你,它的工作..但name1.innerText = data.results [i] .name仅在网页中显示一个名称,但在控制台data.results [i] .name显示10个名称。function showDetail(data){ for(i = 0 ; i

+0

'name1.innerText = data.results [I] .name'只会显示一个名字,因为每次调用时,在一个循环这将覆盖'name1.innerText',不追加到它。所以,如果你想'name1.innerText'拥有完整的名称列表,那么你需要创建一个'names'(或其他)字符串并将名称附加到该字符串中,然后只有当没有更多的数据时。 next',做'name1.innerText = names'。查看答案中更新的代码片段。 – sideshowbarker

+0

请参阅https://stackoverflow.com/help/someone-answers,了解有人在Stack Overflow为您回答问题时该怎么做。您没有足够的声望来点赞,但您确实有足够的声望来接受答案,方法是单击任何答案旁边的复选标记以将其从灰色变为灰色。您应该这样做,以获得您在此获得的任何答案解决您的问题中的问题。并且每次接受答案时你都会得到2分,所以接受正确的答案也让你更接近于获得足够的代表做其他事情(如upvote) – sideshowbarker