【发布时间】: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