Soundcloud api" Uncaught TypeError:无法读取属性' uri'未定义"

时间:2016-05-18 06:05:45

标签: javascript jquery api soundcloud

我一直在基于流派的网站上调用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()。它总是返回我点击的类型。那么这里可能出现什么问题呢?

1 个答案:

答案 0 :(得分:0)

据推测,SC.get可以返回0到limit个曲目之间的任意位置,因此您的随机数不应超过实际的曲目数。

假设您的搜索仅返回10个结果,并且您的随机数为40(0到49之间),尝试访问tracks[40].uri会因为越界错误而失败。

改为使用

var random = Math.floor(Math.random() * tracks.length);