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

时间:2015-09-11 22:55:25

标签: javascript uri undefined soundcloud

我试图从this video复制代码。它已经老了,所以我更改了SDK的网址。这是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);
    };
}

在第9行启动SC.oEmbed(....)时,它会给出错误&#34;无法读取属性&#39; uri&#39;未定义的。&#34;

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

由于

1 个答案:

答案 0 :(得分:0)

您的随机数有时会高于返回的曲目数组。 因此,如果您只返回了10首曲目,则无法访问uri的曲目&gt; 10.

您只需将限制添加到50即可。 或添加一个检查随机值不会大于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/