#javascript #arrays #api #fetch-api
Вопрос:
я знаю, что я сделал со своим кодом, но вчера эта выборка работала. Я извлекаю фотографию котенка из API. Сегодня, когда я попробовал его не работать, он говорит, что URL-адрес не определен. Та же проблема у моего друга из буткемпа. Что-то происходит с API.
function getKitties() {
fetch("https://api.thecatapi.com/v1/images/search")
.then((response) => {
(response.json())
.then((response) => {
(console.log(response)
)
})
var cat = response[0].url;
})
var imgcat = document.createElement("img");
imgcat.src = cat;
var dtag = document.createAttribute("data-tag");
dtag.value = "img-kitty";
imgcat.setAttributeNode(dtag);
imgcat.innerHTML = " "
document.body.appendChild(imgcat);
}
<button id="searchKitty" onclick="getKitties()">Click me</button>
Комментарии:
1. Рабочая демонстрация — попробуйте сравнить свой код javascript с тем, который приведен в демо. Это должно дать вам представление о том, почему ваш код не работает.
Ответ №1:
Вам нужно перенести действие в ТО
Вот версия, в которой используются рекомендуемые методы, addEventListener и catch, а также упрощенный атрибут данных
document.getElementById('searchKitty').addEventListener('click', e => {
fetch('https://api.thecatapi.com/v1/images/search')
.then(response => response.json())
.then(response => {
console.log(response);
var cat = response[0].url;
var imgcat = document.createElement("img");
imgcat.src = cat;
imgcat.dataset.tag = "img-kitty";
imgcat.setAttribute("alt",response[0].breeds.join("") || "Cat")
document.body.appendChild(imgcat)
})
.catch(error => console.log(error.message));
})
img {
height: 100px;
margin: 5px;
}
<button id="searchKitty" type="button">Click me</button>
<hr/>
Комментарии:
1. Вероятно, вам следует исправить цепочку обещаний-нет необходимости помещать
then()
вызов метода в функцию обратного вызова первогоthen()
метода, когда вы можете просто вернутьсяresponse.json()
из обратного вызова первогоthen()
метода и связать второйthen()
метод вместо его вложения, и в идеале также должен бытьcatch()
метод.2. @Yousaf Спасибо, я это пропустил. Теперь я оптимизировал код