Я хочу получить https://swapi.co/api/people/ все имя и другие детали, но когда я использую вызов axios для получения данных, и я получаю undefined
для всех данных, но если хотите, чтобы одно имя я получаю ошибка CORS в консоли.
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);
Данные JSON от https://swapi.co/api/people не имеют 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>
name1.innerText =data.results[i].name
будет показывать только одно имя, потому что каждый раз, когда вы вызываете его в цикле, он перезаписываетname1.innerText
, а не добавляется к нему. Поэтому, если вы хотите, чтобыname1.innerText
имел полный список имен, вам нужно создать строкуnames
(или любуюdata.next
) и добавить к ней имена, и только тогда, когдаdata.next
большеdata.next
, выполнитеname1.innerText = names
. Смотрите обновленный фрагмент кода в ответе.