2016-05-18 9 views
0

私はジャンルに基づいて私のウェブサイトでsoundcloud playerを呼び出しています。しかし、時には "未定義のプロパティ 'uri'を読み取ることができず、時にはそうではありません。私のコードを見ている理由は何ですか?Soundcloud api "Uncaught TypeError:未定義の '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'}); 
    }); 
} 

を確認するには、問題は、私にplaySound()内部console.log(genre)である何。私はクリックしたジャンルを常に返しています。では、ここで何が問題になるのでしょうか?

+2

これを使用すると、あなたはトラックの配列の長さに対するランダムの値を確認しましたか?それらの両方をconsole.logに記録し、エラーが発生したときにどのような値を持っているかを確認します。 – theatlasroom

+0

コンソールに 'tracks [random]'を記録し、チェックします。 –

+1

より安全な乱数は 'var random = Math.floor(Math.random()* tracks.length)' – Phil

答えて

0

おそらくSC.getは0〜limitトラックの間のどこかに戻ってきますので、乱数は実際のトラック数を超えないようにしてください。

検索結果が10件あり、乱数が40(0〜49)だった場合、範囲外のエラーが原因でtracks[40].uriにアクセスしようとすると失敗します。

代わり

var random = Math.floor(Math.random() * tracks.length); 
関連する問題