Автопоиск Youtube с индивидуальным выходом v2 до v3 - PullRequest
0 голосов
/ 05 ноября 2018

У меня возникла следующая проблема: я хочу обновить старый скрипт автозапуска Youtube версии 2 до версии 3, но не могу понять, что именно я делаю неправильно, нужна помощь. Выдает это сообщение об ошибке:

test.php:27 Uncaught TypeError: Cannot read property 'items' of undefined
    at Object.success (test.php:27)
    at j (jquery-latest.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-latest.min.js:2)
    at x (jquery-latest.min.js:4)
    at XMLHttpRequest.b (jquery-latest.min.js:4)

Это мой код, пока только заменил URL и использовал ключ API. Но каждый раз, когда я нажимаю клавишу ввода в поле ввода, выводится указанная выше ошибка.

<input id="searchquery" />
<div id="results"></div>

<!-- Include the latest jQuery library -->
<script src="https://code.jquery.com/jquery-latest.min.js"></script>

<script type="text/javascript">
jQuery(document).ready(function ($) {

  $('#searchquery').keyup(function () {

    // the search term
    var q = $('#searchquery').val().trim();

    // container to display search results
    var $results = $('#results');

    // YouTube Data API base URL (JSON response)
    var url = "https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"



    $.getJSON(url + "&q=" + q, function (json) {

      var count = 0;

      if (json.data.items) {

        var items = json.data.items;
        var html = "";

        items.forEach(function (item) {


            // Include the YouTube Watch URL youtu.be 
            html += '<p><a href="https://youtu.be/' + item.id + '">';

            // Add the default video thumbnail (default quality)
            html += '<img src="https://i.ytimg.com/vi/' + item.id + '/default.jpg">';

            // Add the video title and the duration
            html += '<h2>' + item.title + ' ' + item.duration + '</h2></a></p>';
            count++;

        });
      }

      // Did YouTube return any search results?
      if (count === 0) {
        $results.html("No videos found");
      } else {
        // Display the YouTube search results
        $results.html(html);
      }
    });
  });
});
</script>

1 Ответ

0 голосов
/ 05 ноября 2018

После отладки вашего кода с использованием JS Fiddle, вот что я обнаружил. Я попытался записать ответ json obj:

{
etag: ""XI7nbFXulYBIpL0ayR_gDh3eu1k/Ou9EhMuIjRoTlkkxhthG81p96AE""
items: (5) [{…}, {…}, {…}, {…}, {…}]
kind: "youtube#searchListResponse"
nextPageToken: "CAUQAA"
pageInfo: {totalResults: 1000000, resultsPerPage: 5}
regionCode: "PH"
}

Это означает, что ваш json.data.items будет неопределенным, поскольку внутри объекта нет свойства data.

Попробуйте изменить код на json.items. Это исправит вашу ошибку. Я хотел бы предложить, если вы столкнулись с другой ошибкой, попробуйте отладить ваш код, используя Chrome dev tools или console.log.

...