javascript - 正确解析 YouTube API 的响应

标签 javascript jquery json youtube youtube-api

我正在使用 YouTube API (v3) 构建一个示例应用程序,它将根据搜索词提供视频列表。这个概念是使用响应中的数据填充页面。

我已使用 v3 中记录的客户端库来访问 API 并发送我的请求,但是我不知道如何正确浏览响应中提供的数据以显示所需的元素。下面的代码显示了我的脚本,我试图在其中访问并列出响应中的视频标题:

 $(function () {
    //FUNCTION TO COLLECT QUERY TERM FROM SEARCH FORM
     var $searchField = $('#search-text');

    $('#mainSearch'). on ('submit', function(e){
        e.preventDefault();
        if ($searchField.val() !== '') { //IF SEARCH FORM IS NOT EMPTY
                var $searchQuery = $searchField.val()+ ' parody'; //PREPARE SEARCH QUERY
                makeRequest($searchQuery);  //PASS SEARCH QUERY TO REQUEST FUNCTION
            }
            else {
                $searchField.focus(); //ADD ERROR CLASS HERE
                $searchField.blur(function (e){
                    //REMOVE ERROR CLASS HERE
            });

        }
    });

    function makeRequest(query){
        var request = gapi.client.youtube.search.list({
            part: 'snippet',
            q: query
        });
        $('.content').empty();
        request.execute(parseResponse);
    }

    function parseResponse(data) {
        $.each(data, function (i, items){
            var $infoDiv = $('<div></div>');
            $infoDiv.append('<p>'+ items.snippet.title +'</p>');
            $('.content').append($infoDiv);
        });
    }

});

//LOAD API CLIENT
function initClient() {
        gapi.client.load('youtube', 'v3');
        gapi.client.setApiKey('AIzaSyARVmOp3tBIA3ZgW6z4DK_-1sMJwulPvps');
}   

但是我的页面没有填充任何数据,并且我在控制台中收到此错误:

Uncaught TypeError: Cannot read property 'title' of undefined

这是我的页面的标记:

    <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title>Parrdy Template</title>
    <!--
    <Bootstrap></Bootstrap>-->
    <link href="stylesheets/bootstrap.min.css" rel="stylesheet"/>
    <link href="stylesheets/style.min.css" rel="stylesheet"/>
    <!--
    <HTML5>Shim and Respond.js IE8 support of HTML5 elements and media queries </HTML5>--><!--
    <WARNING>
      <Respond class="js">doesn't work if you view the page via file:// </Respond>
    </WARNING>--><!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]-->
  </head>
  <body>
    <div class="container">
      <div class="header">
        <img src="/images/Logo1_mod.png" width="200">
        <form role="form" id= "mainSearch" class="navbar-form navbar-right pull-right">
          <div class="form-group">
            <input type="text" id="search-text" placeholder="Search" class="form-control">
          </div>
          <button type="submit" id="vid-search" class="btn btn-sm btn-warning">Search</button>
        </form>
      </div>

      {{{body}}}

      <div class="footer">
        <ul class="nav nav-pills pull-left">
            <li><a class="customcolor" href="#">About</a></li>
            <li><a class="customcolor" href="#">Contact Us</a></li>
          </ul>
      </div>
    </div><!--container ends-->
    <!--
    <jQuery>(necessary for Bootstrap's JavaScript plugins) </jQuery>-->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><!--
    <Include>all compiled plugins (below), or include individual files as needed</Include>-->
    <script src="js/bootstrap.min.js"></script>
    <script src="js/core1.1.js"></script>
    <script src="https://apis.google.com/js/client.js?onload=initClient" type="text/javascript">
    </script>
  </body>
</html>

如果您能提供有关如何从 YouTube API 响应中正确访问元素的任何帮助,我们将不胜感激。谢谢。

最佳答案

您要记住的第一件事是,您要查找的内容作为数据嵌套在响应中,因此您需要访问“response.data”,并且该数据中是一个项目数组。您需要使用 items[0] 访问第一个数组,现在您可以从此处获取 id 或使用 .snippet.statistic

get(url)
.then(response => {
id: response.DATA.items[0].id
title: response.DATA.items[0].snippet.title
}
.catch(
error => {console.log(error)}

关于javascript - 正确解析 YouTube API 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28314494/

相关文章:

javascript - 如何使用 javascript 在 google 图表中添加数据?

java - 如何为父类和子类使用单独的自定义 json 序列化程序?

javascript - 将 json 结果渲染为 div 中的饼图 - highmaps

c# - 使用 JavaScriptSerializer 将实体映射到 JSON

javascript - 如何在 JavaScript 中创建实例变量?

javascript - require 在使用 browserify 时返回空对象

jquery - 我可以在特定的 div 中显示一个元素 - jQuery

javascript - Vanilla JavaScript 中的轮播 - 滑动所有图片而不是一张

Canvas 的 Javascript 像素操作,模糊过滤器不起作用

jqueryUI 多句柄和图像作为句柄 slider