JavaScript Soundcloud API 集成 - 无法读取未定义的属性'uri'



我想从这个视频复制代码。它是旧的,所以我更改了SDK的url。下面是JS代码:

function playSomeSound(genre){
SC.get('/tracks', {
    genres: genre,
    bpm: {
        from: 40
    }
}, function(tracks){
    var random = Math.floor(Math.random() * 49);
    SC.oEmbed(tracks[random].uri, { auto_play: true}, document.getElementByID('target'));
});
}
window.onload = function(){
SC.initialize({
    client_id: '1166055b8d5ca23b9c265bf8846d1102'
});
var menuLinks = document.getElementsByClassName('genre');
for (var i = 0; i < menuLinks.length; i++){
    menuLinks(i).onclick = function(e){
        e.preventDefault();
        playsomesound(menuLinks.innerHTML);
    };
}

在SC.oEmbed(....)开头的第9行,它给出了错误"Cannot read property 'uri' of undefined."

有人能告诉我什么是错的,或者指向一个可能有帮助的资源吗?

谢谢

您的随机数有时大于返回的曲目数组。因此,如果您只返回了10个音轨,您就不能访问音轨> 10的uri。

您可以简单地将限制添加到50。或者添加一个函数来检查random不会大于tracks.length。

这是一个工作小提琴:

function playSomeSound(genre){
SC.get('/tracks', {
    genres: genre,
    bpm: {
        from: 40
    }, 
    limit: 50
}, function(tracks){
    var random = Math.floor(Math.random() * 49);
    console.log(random, tracks.length);
    SC.oEmbed(tracks[random].uri, { auto_play: true}, document.getElementById("target"));
});
}
window.onload = function(){
SC.initialize({
    client_id: '1166055b8d5ca23b9c265bf8846d1102'
});
}    
playSomeSound('house');
/*
var menuLinks = document.getElementsByClassName('genre');
for (var i = 0; i < menuLinks.length; i++){
    menuLinks(i).onclick = function(e){
        e.preventDefault();
        playsomesound(menuLinks.innerHTML);
    };
}
*/ 
http://jsfiddle.net/iambnz/yy8hwg76/

最新更新