我一直在基于流派的网站上调用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()
。它总是返回我点击的类型。那么这里可能出现什么问题呢?
答案 0 :(得分:0)
据推测,SC.get
可以返回0到limit
个曲目之间的任意位置,因此您的随机数不应超过实际的曲目数。
假设您的搜索仅返回10个结果,并且您的随机数为40(0到49之间),尝试访问tracks[40].uri
会因为越界错误而失败。
改为使用
var random = Math.floor(Math.random() * tracks.length);