我在这个项目上使用 CodePen,这就是我发现我的代码中有一个无限循环的方式。顺便说一句 - 它估计无限循环的行号为第 0 行,这就是为什么我怀疑它与这段$(document).ready()
代码有关。
我是 jQuery / API 初学者,如果这很明显,我深表歉意。
这是代码:
$(document).ready(function() {
var key = '*****************';
var i = 0;
var hotArray = [];
function isInArray(value, array) {
return array.indexOf(value) > -1;
}
function getMusic() {
$.getJSON('http://developer.echonest.com/api/v4/song/search?api_key=' + key + '&artist=led+zeppelin&sort=song_hotttnesss-desc&results=50&bucket=song_hotttnesss', function(data) {
while ($('.songs li').length < 10) {
if (!(isInArray(data.response['songs'][i]['hotttnesss'], hotArray))) {
$('.songs').append('<li>' + data.response['songs'][i]['title'] + '</li>');
hotArray.push(data.response['songs'][i]['hotttnesss'])
}
}
i++;
});
};
$('.click').click(getMusic);
});
代码简要说明:
当我点击页面的某个位时,我试图获得 Led Zeppelin 的前 10 首歌曲(稍后将扩展到用户输入的艺术家)。但是 Echo Nest API 的工作方式会返回很多很多重复项。例如,“Stairway to Heaven”和“Stairway To Heaven”被认为是两首独立的歌曲。
为了解决这个问题,我使用了每首歌曲的“hotttnesss”值,这对于每首歌曲都是独一无二的。同一艺术家的两首歌曲可以具有相同的热度的唯一方法是它们实际上是同一首歌曲,就像这些重复的情况一样。
因此,当报告的歌曲数量低于 10 时,我将逐步浏览每首返回的歌曲,并在其 hotttnesss 值不在已报告歌曲的 hotttnesss 值数组中时报告该歌曲。报告歌曲后,将歌曲的 hotttnesss 值添加到数组中。