#jquery #ajax #api
#jquery #ajax #API
Вопрос:
Здравствуйте, это школьный проект (HTML, CSS, jQuery, AJAX), все, что я сделал, в порядке, но у меня есть две небольшие проблемы.
- Кнопка дополнительной информации: вместо того, чтобы показывать мне информацию для каждой монеты, она показывает мне ту же информацию для всех монет сразу.
- Кнопка поиска — не выполняется поиск, могу ли я узнать, что я здесь сделал не так? Это код:
// -------- Show all the coins onload -------- //
$(document).ready(showAllCoins());
// --------------------------------- Show all fonts onload function --------------------------------- //
function showAllCoins() {
$.ajax({
url: "https://api.coingecko.com/api/v3/coins/list",
dataType: "json",
success: function (data) {
// console.log(data);
for (let i = 0; i < 100; i ) {
$(".coins").append(`
<div class="card">
<div class="card-body">
<span>
<p id="coin-sym"><strong>symbol:</strong> ${data[i].symbol}<br>
<strong>name:</strong> ${data[i].name}</p>
<button class="btn btn-primary btn-sm" data-toggle="collapse" data-target="#${data[i].id}" onClick="moreInfo('${data[i].id}')">More Info</button>
<div class="collapse" id="a${data[i].id}">details added here</div>
</span>
</div>
</div>
</div>
`)
}
}
})
}
// --------------------------------- Search Function --------------------------------- //
function searchCoins() {
$.ajax(
{
type: 'GET',
datatype: 'json',
url: "https://api.coingecko.com/api/v3/coins/" searchInput.value,
success: function (data) {
searchCoin[0] = data
$(".searchResult").html($(`.${searchInput}`));
console.log(data)
},
error: function (error) {
console.log("error : ", error);
}
}
);
}
// ---------------------------------More info function --------------------------------- //
function moreInfo(id) {
$.ajax({
url: "https://api.coingecko.com/api/v3/coins/" id,
dataType: "json",
success: function (data) {
$(".card").append(`
<div class="card-body">
<div><img src=${data.image.small}/>
<p>Price List:</p>
<ul>
<li>${data.market_data.current_price.usd} $</li>
<li>${data.market_data.current_price.eur} €</li>
<li>${data.market_data.current_price.ils} ₪</li>
</ul>
</div>
`)
}
})
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<div class="container-fluid" id="container">
<div>
<form class="form-inline">
<input class="form-control" type="search" placeholder="Type something.." aria-label="Search"
id="searchInput">
<button class="btn btn-success" type="button" id="searchButton" onclick="searchCoins()">Search</button>
</form>
</div>
<div class="card-columns">
<div class="coins" id="coinsLoad"></div>
</div>
</div>
</body>
</html>
Ответ №1:
Что касается второй проблемы, которую я не могу понять, потому что вы ссылаетесь на элемент с классом SearchResult, который я не вижу.
Для первой проблемы вам нужно изменить эту строку:
$(".card").append(`
Для:
$('#' id).closest(".card").append(`
Это для того, чтобы показать подробную информацию только для нажатой кнопки. В любом случае я бы посоветовал избегать встроенных обработчиков событий.
$(function () {
// -------- Show all the coins onload -------- //
showAllCoins();
});
// --------------------------------- Show all fonts onload function --------------------------------- //
function showAllCoins() {
$.ajax({
url: "https://api.coingecko.com/api/v3/coins/list",
dataType: "json",
success: function (data) {
// console.log(data);
for (let i = 0; i < 100; i ) {
$(".coins").append(`
<div class="card">
<div class="card-body">
<span>
<p id="coin-sym"><strong>symbol:</strong> ${data[i].symbol}<br>
<strong>name:</strong> ${data[i].name}</p>
<button class="btn btn-primary btn-sm" data-toggle="collapse" data-target="#${data[i].id}" onClick="moreInfo('${data[i].id}')">More Info</button>
<div class="collapse" id="${data[i].id}">details added here</div>
</span>
</div>
</div>
</div>
`)
}
}
})
}
// --------------------------------- Search Function --------------------------------- //
function searchCoins() {
var valTosearch = $('#searchInput').val()
$.ajax(
{
type: 'GET',
datatype: 'json',
url: "https://api.coingecko.com/api/v3/coins/" valTosearch,
success: function (data) {
$(".searchResult").html($(`.${searchInput}`));
console.log(data)
},
error: function (error) {
console.log("error : ", error);
}
}
);
}
// ---------------------------------More info function --------------------------------- //
function moreInfo(id) {
$.ajax({
url: "https://api.coingecko.com/api/v3/coins/" id,
dataType: "json",
success: function (data) {
if ($('#' id).closest(".card").find('.card-body').length == 1) {
$('#' id).closest(".card").append(`
<div class="card-body">
<div><img src=${data.image.small}/>
<p>Price List:</p>
<ul>
<li>${data.market_data.current_price.usd} $</li>
<li>${data.market_data.current_price.eur} €</li>
<li>${data.market_data.current_price.ils} ₪</li>
</ul>
</div>
`);
}
}
})
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<div class="container-fluid" id="container">
<div>
<form class="form-inline">
<input class="form-control" type="search" placeholder="Type something.." aria-label="Search"
id="searchInput">
<button class="btn btn-success" type="button" id="searchButton" onclick="searchCoins()">Search</button>
</form>
</div>
<div class="card-columns">
<div class="coins" id="coinsLoad"></div>
</div>
</div>
Комментарии:
1. большое вам спасибо, все работает отлично 🙂 Я добавил функцию свертывания $(‘.content-collapse’).slideToggle(‘slow’); } Я также определил этот класс, но что происходит: при повторном нажатии на кнопку, чтобы свернуть его, он сворачивает его, но, кроме того, он добавляет под ним другую информацию.
2. фрагмент обновлен: больше нет ………… но, кроме того, он добавляет другую информацию под ним
3. Большое вам спасибо @gaetanoM, вы действительно помогли мне в функции «Дополнительная информация» 🙂