Api 调用没有 jQuery / javascript
Api call doesn't jQuery / javascript
我正在尝试对网站使用 pokeApi,但我的功能第二次不起作用。
结果在下一个=下一个link我想用那个Apireturns.
const beginLink = "https://pokeapi.co/api/v2/pokemon/";
let next;
let previous;
apiCall(beginLink);
function apiCall(link) {
$('#pokemons').html(``);
$.ajax({
url: link
}).done(handleResponse);
function handleResponse(data) {
next = data.next;
previous = data.previous;
for (let i = 0; i < 20; i++) {
$('#pokemons').append(`<div class="pokemon"><img src="https://raw.githubusercontent.com/msikma/pokesprite/master/pokemon-gen8/regular/${data.results[i].name}.png"><br><p>${data.results[i].name}</p></div>`);
}
}
}
$("#next").on("click ", apiCall(next));
主要问题是因为 apiCall(next)
没有 return 函数。因此,当点击事件发生时,什么也没有发生。
要解决此问题,并消除对应该避免的全局变量的依赖,您可以将下一次调用的 URL 放入 [=14] 持有的 data
=] 元素。这样,根据 AJAX 响应更新 DOM 内容的函数完全是 self-contained.
let $next = $('#next');
let $pokemonContainer = $('#pokemons');
function apiCall() {
$pokemonContainer.empty();
$.get($next.data('url')).done(handlePokemonApiResponse);
}
function handlePokemonApiResponse(data) {
$next.data('url', data.next);
let html = data.results.map(p => `<div class="pokemon"><img src="https://raw.githubusercontent.com/msikma/pokesprite/master/pokemon-gen8/regular/${p.name}.png"><br><p>${p.name}</p></div>`);
$pokemonContainer.html(html);
}
$next.on("click", apiCall).trigger('click');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<button type="button" id="next" data-url="https://pokeapi.co/api/v2/pokemon/">Next</button>
<div id="pokemons"></div>
我正在尝试对网站使用 pokeApi,但我的功能第二次不起作用。
结果在下一个=下一个link我想用那个Apireturns.
const beginLink = "https://pokeapi.co/api/v2/pokemon/";
let next;
let previous;
apiCall(beginLink);
function apiCall(link) {
$('#pokemons').html(``);
$.ajax({
url: link
}).done(handleResponse);
function handleResponse(data) {
next = data.next;
previous = data.previous;
for (let i = 0; i < 20; i++) {
$('#pokemons').append(`<div class="pokemon"><img src="https://raw.githubusercontent.com/msikma/pokesprite/master/pokemon-gen8/regular/${data.results[i].name}.png"><br><p>${data.results[i].name}</p></div>`);
}
}
}
$("#next").on("click ", apiCall(next));
主要问题是因为 apiCall(next)
没有 return 函数。因此,当点击事件发生时,什么也没有发生。
要解决此问题,并消除对应该避免的全局变量的依赖,您可以将下一次调用的 URL 放入 [=14] 持有的 data
=] 元素。这样,根据 AJAX 响应更新 DOM 内容的函数完全是 self-contained.
let $next = $('#next');
let $pokemonContainer = $('#pokemons');
function apiCall() {
$pokemonContainer.empty();
$.get($next.data('url')).done(handlePokemonApiResponse);
}
function handlePokemonApiResponse(data) {
$next.data('url', data.next);
let html = data.results.map(p => `<div class="pokemon"><img src="https://raw.githubusercontent.com/msikma/pokesprite/master/pokemon-gen8/regular/${p.name}.png"><br><p>${p.name}</p></div>`);
$pokemonContainer.html(html);
}
$next.on("click", apiCall).trigger('click');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<button type="button" id="next" data-url="https://pokeapi.co/api/v2/pokemon/">Next</button>
<div id="pokemons"></div>