2017-11-18 21 views
1

https://swapi.co/api/people/すべての名前とその他の詳細を取得したいが、データを取得するためにaxios呼び出しを使用しているときに、私はすべてundefinedを取得している1つの名前が必要な場合は、コンソールで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です。

ですから、各name取得することdata.results配列をループする必要があります。

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エンドポイントは、結果ページを区切り。

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

は、それが働いたあなたに感謝:ので、次のページのURLを取得するためにdata.nextをチェックし、すべての名前を取得するには、その後、次の結果セットを取得するためにそのURLで新しい要求を行います.. name1.innerText = data.results [i] .nameはWebページの1つの名前のみを表示しますが、コンソールのdata.results [i] .nameは10個のnames.functionを表示していますshowDetail(data){ for(i = 0 ; i

+0

を呼び出すたびに、ループ内では、 'name1.innerText'を上書きしないように起こっていることをするので、' name1.innerText = data.results [i]を.name'のみ、1名を表示しようとしていますそれに追加します。だから、 'name1.innerText'に完全な名前リストを持たせたいなら、' names'(あるいは何でも)の文字列を作成し、それに名前を追加する必要があります。 next'、 'name1.innerText = names'を実行します。その答えの更新されたコードスニペットを見てください。 – sideshowbarker

+0

Stack Overflowで誰かがあなたの質問に答えたときの対処方法については、https://stackoverflow.com/help/someone-answersを参照してください。あなたはまだupvoteに十分な評判を持っていませんが、答えの横にあるチェックマークをクリックすることで答えを受け入れるには十分な評判があります。グレーアウトから塗りつぶしに切り替える必要があります。あなたの質問の問題を解決してください。そして、あなたは回答を受け入れるたびに2点をあなたの担当者に追加するので、正解を受け入れることで、他のもの(upvoteのようなもの)を行うのにも近くなります – sideshowbarker

関連する問題