【问题标题】:Accessing Video Duration via AJAX in YouTube API在 YouTube API 中通过 AJAX 访问视频时长
【发布时间】:2018-09-28 20:21:32
【问题描述】:

我一直在尝试创建一个小脚本,通过其id 访问 YouTube 视频并确定其持续时间。

这是我的脚本:

var vidID = "";

var vidData;

var vidDuration;

function getResponse() {
  $.getJSON( "https://www.googleapis.com/youtube/v3/videos?id=unSlPx7Zu-w&part=contentDetails&key=AIzaSyCSMBWe5CbW122szJGvGjQ6UrktPL4Z0Mw", function( data ) {
    var items = [];
    
    vidDuration = data;
    
    $.each( data, function( key, val ) {
      items.push( "<li id='" + key + "'>" + val + "</li>" );
    });
    
    $('body').append (JSON.stringify(data));
    
    $( "<ul/>", {
      "class": "my-new-list",
      html: items.join( "" )
    }).appendTo( "body" );
  });
}

getResponse();

console.log(vidDuration.items[0][contentDetails][duration]);
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <script src="https://raw.githubusercontent.com/douglascrockford/JSON-js/master/json2.js"></script>
</body>
</html>

控制台结果:

"error"
"TypeError: Cannot read property 'items' of undefined
    at felepivuni.js:28:50
    at https://static.jsbin.com/js/prod/runner-4.1.4.min.js:1:13924
    at https://static.jsbin.com/js/prod/runner-4.1.4.min.js:1:10866"

如您所见,这几乎与输出的预期一样。它为我们提供了字符串化的 JSON,然后是 2 个主要的 JSON 对象。

但在那之后,我得到了 [Object object] 两次..

这是我们收到的响应数据包的结构:

{
 "kind": "youtube#videoListResponse",
 "etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/ny1S4th-ku477VARrY_U4tIqcTw\"",
 "items": [
  {

   "id": "9bZkp7q19f0",
   "kind": "youtube#video",
   "etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/HN8ILnw-DBXyCcTsc7JG0z51BGg\"",
   "contentDetails": {
    "duration": "PT4M13S",
    "dimension": "2d",
    "definition": "hd",
    "caption": "false",
    "licensedContent": true,
    "regionRestriction": {
     "blocked": [
      "DE"
     ]
    }
   }
  }
 ]
}

虽然我知道这个问题曾经出现过,但我相信我的情况是真诚的,我仍然没有找到我的问题的答案。

当你运行上面的代码sn-p时,控制台会记录undefined,并且输出,如上所述,有[Object object],这是可以预料的......

我知道这有点拖沓,但我真的很感谢解释为什么我的代码不起作用!

即使我知道这个存在,Youtube Video Duration API v3,它也不能帮助我解决我的问题,所以我仍然在问这个..

非常感谢!

  • 诺亚

【问题讨论】:

  • 似乎几乎不可能在处理程序函数之外传递任何 JSON 值......我在许多尝试中都没有成功,但我已经能够让控制台记录处理函数中的持续时间...这是什么?
  • 你真的发布了你的 API 密钥???
  • 是的@StanStrum,它只是暂时的,我总能得到一个新的:P

标签: javascript arrays json ajax youtube-api


【解决方案1】:

您正在调用异步的 $getJson。

getResponse(); //需要等待这个函数返回

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 2012-08-19
    • 2013-03-21
    • 1970-01-01
    • 2011-09-19
    • 2012-06-04
    • 2014-09-27
    • 2015-07-18
    • 2018-06-28
    相关资源
    最近更新 更多