Основная проблема в том, что
const artistName = $('.query').val();
запускается при первой загрузке вашей страницы. Поэтому вы присваиваете artistName
значение того, что было в текстовом поле «запрос» в тот момент. Переменная не обновляется при вводе нового значения. Вам нужно спросить, каково значение поля в момент запуска вашей функции fetchAPIList (), а затем использовать это в своем URL.
Вторичная проблема заключается в том, что вы запускаете функцию fetchAPIList () при отправке формы ... но вы не препятствует поведению формы по умолчанию, которое заключается в традиционной полностраничной обратной передаче на сервер.
Собрав воедино эти две вещи и объединив их с тем фактом, что вы используете jQuery, и с тем, что, как правило, рекомендуется использовать ненавязчивые обработчики событий (то есть обработчики событий, объявленные в основном сценарии, а не встроенные в HTML), мы можем переставить код следующим образом:
HTML (изменение здесь в том, что форма больше не имеет «onsubmit», но у нее есть «id» для ее идентификации):
<fieldset>
<form action=# role="form" id="searchForm">
<label for="search-musixmatch" id="label">Find Songs by Artist</label>
<input class="query" type="text" placeholder="Search for Artist">
<input class="submit-button" type="submit">
</form>
</fieldset>
JS (функция getAPIList изменена на ненавязчивый обработчик событий, удалены неиспользуемые функции watchSubmit и displaySongData, переопределена функция getDataFromApiSongs для принятия последнего значения artistName):
const MusicAPI = "https://api.musixmatch.com/ws/1.1/";
const APIKey= "a2870731fab086760a6e7e1a767ceb86";
function getDataFromApiSongs(endpoint, artistName, callback) {
$.ajax({
data: Object.assign({
apikey: APIKey,
format: 'json' }, `q_artist=${artistName}`),
contentType: 'application/json',
type: "GET",
url: MusicAPI + endpoint}).done(callback);
}
//unobtrusive "submit" event handler written using jQuery syntax
$("#searchForm").submit(function(event) {
event.preventDefault(); //prevent default postback behaviour
var artistName = $(".query").val();
getDataFromApiSongs(`track.search?q_artist=${artistName}&page_size=10&page=1&s_track_rating=desc`, artistName, (response) =>{
const message = JSON.parse(response);
console.log(message.body)
const { message:{ body: {track_list = []}}} = message;
console.log(track_list);
let songDOM = ''
track_list.map((item) => {
const {track:{ track_name,artist_name, album_name }} = item;
songDOM += `<li><b>Title</b>: "${track_name}" by ${artist_name}, <i>${album_name}</i>`;
});
let songsList = document.getElementById('songsList')
songsList.innerHTML = songDOM;
$(".query").val("");
});
});
Обновлен репл: https://repl.it/repls/GoodnaturedNoisyApplication