2016-05-18 2 views
0

Я звонил в Soundcloud плеер на моем сайте по жанру. Однако иногда он возвращает «Невозможно прочитать свойство« uri »неопределенного», а иногда это не так. Любая идея, почему я смотрю на свой код?Soundcloud api «Uncaught TypeError: Невозможно прочитать свойство« uri »undefined»

<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'); 
    } 
    }); 

Sound

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(). Он всегда возвращает жанр, который я нажал. Тогда в чем проблема?

+2

Вы проверили значение случайной против длины массива треков? console.log их обоих и посмотреть, какие значения у них есть, когда вы получаете ошибку. – theatlasroom

+0

Журнал 'track [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); 
Смежные вопросы