Javascript Youtube数据API v。3-显示私人/已删除视频的频道作者名称
这是一个非常适得其反的内部决定。如果我错了,请纠正我,但他们目前不想公开私人/已删除视频的频道名称。如果发生这种情况,他们甚至称之为“bug”()。那么,如果我单独请求之前是公共的但后来变成私有或被删除的视频ID,会发生什么呢?通过使用Youube数据API v3,我将在控制台中获得一条“response is undefined”(响应未定义)错误消息。当信息发生时会发生什么?我的密码坏了 这是我目前使用的代码:Javascript Youtube数据API v。3-显示私人/已删除视频的频道作者名称,javascript,api,youtube,Javascript,Api,Youtube,这是一个非常适得其反的内部决定。如果我错了,请纠正我,但他们目前不想公开私人/已删除视频的频道名称。如果发生这种情况,他们甚至称之为“bug”()。那么,如果我单独请求之前是公共的但后来变成私有或被删除的视频ID,会发生什么呢?通过使用Youube数据API v3,我将在控制台中获得一条“response is undefined”(响应未定义)错误消息。当信息发生时会发生什么?我的密码坏了 这是我目前使用的代码: function DisplayThemVideos(yeah) { var y
function DisplayThemVideos(yeah) {
var yeah = $("#ThoseMissingIDs").text();
var vidrequestOptions = {
id: yeah,
part: 'snippet',
fields: 'items(id),items(snippet(channelId)),items(snippet(channelTitle)),
items(snippet(title)),items(snippet(thumbnails(default)))'
};
var vidrequest = gapi.client.youtube.videos.list(vidrequestOptions);
vidrequest.execute(function(response) {
var videoIdItems = response.result.items;
if (videoIdItems) { // If results
displayResults(videoIdItems);
} else { // if NO results
alert('Sawwy, YouLose, thx to Youtube!'); // This alert never fires!
}
});
}
现在,未定义的“响应”实际上是从Youtube服务器发送回我的应用程序的空请求。Youtube以一个空的“item”标签作为回应,这显然对displayResults(videoIdItems)
功能没有多大帮助,该功能在没有显示任何项目的情况下启动!他们至少应该让频道名称和频道ID过滤,这样用户就可以点击一个链接来访问该频道的其余公共视频(这不是很有效率吗?)
因此,我的难题是让else
部分像这样工作:
displayResults(videoIdItems);
} else { // if NO results or if results return EMPTY or response "undefined"
alert('Sorry pal but these IDs ___________ are currently missing.
Click the Channel link to access the public videos of that channel.');
}
else
部分在类似的API调用中正常工作,如Youtube Data API v.3示例代码所示,但我想它目前无法处理空请求
那我该怎么办?我是否必须使用带有成功-失败错误处理的ajax调用?正如我之前所说的,API返回一个空请求,因此响应是合法的,但是对于私有/删除的视频,响应内容是空的,因此,在wway过程中代码会中断,这是“未定义的”
任何导致有效解决方案的提示都会有所帮助!谢谢您的指导。我只能部分回答我的问题。最简单的方法是使用
Try-Catch
的Catch
方法,该方法检测除语法错误以外的所有内容,有助于检测空响应(未定义)并激活可以访问Youtube播放器以显示缺失ID的当前可用状态的功能:
...
var vidrequest = gapi.client.youtube.videos.list(vidrequestOptions);
vidrequest.execute(function(response) {
try {
var videoIdItems = response.result.items;
if (videoIdItems) { // If results
displayResults(videoIdItems);
return false;
}
} catch (e) {
// put code here that handles errors such as empty or undefined response
// which otherwise breaks your code
} finally {
// optionally, put code here that will always trigger
}
});
希望这能帮助别人