我一直在我的网站上根据流派调用soundcloud播放器。然而,有时它会返回"无法读取未定义的属性"uri",有时则不会。知道为什么要查看我的代码吗?
<div class="col-xs-6 col-md-3">
<a href="javascript:;" class="genre" style="width: 100%; float:left;">
<div class="card trance" data-genre="trance">
<div class="overlay-card" style="display: table;">
<span><h2>Trance</h2></span>
</div>
</div>
</a>
</div>
<div class="col-xs-6 col-md-3">
<a href="javascript:;" class="genre" style="width: 100%; float:left;">
<div class="card techno" data-genre="techno">
<div class="overlay-card" style="display: table;">
<span><h2>Techno</h2></span>
</div>
</div>
</a>
</div>
<div class="col-xs-6 col-md-3">
<a href="javascript:;" class="genre" style="width: 100%; float:left;">
<div class="card metal" data-genre="metal">
<div class="overlay-card" style="display: table;">
<span><h2>Metal</h2></span>
</div>
</div>
</a>
</div>
点击动作功能
$('.genre').click(function(){
if($(this).find('.card').attr('data-genre').length > 0){
playSound($(this).find('.card').attr('data-genre'));
$('#results').html('<img src="assets/image/spinner.gif" class="loader">').show();
$('#loader').css({'display': 'none'});
}else{
console.log('length 0');
}
});
声音播放功能
function playSound(genre){
SC.get('/tracks',
{
genres: $.trim(genre),
order: 'hotness',
// q: '*',
bpm: {
from: 100
},
limit: 50
}, function(tracks){
var random = Math.floor(Math.random() * 49);
console.log(genre); /* It is always returning true */
SC.oEmbed(tracks[random].uri, {auto_play: true, maxheight: 240, show_comments: true }, document.getElementById('results'));
$('.genre-playing h3').html(genre.toUpperCase());
$('.genre-playing').css({'display': 'block'});
});
}
检查一下,问题是什么,我console.log(genre)
在playSound()
里面。它总是回到我点击的类型。那么这里的问题是什么呢?
假设SC.get
可以返回0到limit
轨道之间的任何位置,因此您的随机数不应超过实际轨道数。
假设您的搜索只返回了10个结果,并且您的随机数为40(在0到49之间),则尝试访问tracks[40].uri
将由于越界错误而失败。
使用此替代
var random = Math.floor(Math.random() * tracks.length);