Soundcloud api "Uncaught TypeError: Cannot read property 'uri' of undefined"



我一直在我的网站上根据流派调用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);

最新更新