【发布时间】:2015-09-14 13:40:04
【问题描述】:
我想使用 YouTube API 获取我的所有 YouTube 订阅。但是,Google 将 API 调用中返回的项目数量限制为 50。如果我订阅了 100 多个频道,我将不得不循环 API 调用以获取所有频道。现在我只想在“Inspect popup”调试控制台中 console.log() 它们。
我阅读了大量关于如何在 Javascript 中循环执行异步调用的文章,但所有这些都带有基本的 for() 循环。在使用 YouTube 数据 API 的情况下,您必须进行 API 调用,然后使用 nextPageToken 属性来获取下一页。
这是我目前的popup.js 文件:
$(document).ready(function() {
var ClientID = '[my client id]';
$('#testBtn').click(function() {
chrome.identity.getAuthToken({"interactive": true}, function(token) {
GetInfo(token, "");
});
});
function GetInfo(userToken, pageToken) {
$.ajax({
url: "https://www.googleapis.com/youtube/v3/subscriptions",
type: 'GET',
data: {
part: "snippet",
mine: "true",
nextPageToken: pageToken,
access_token: userToken
},
success: function(data) {
var allIds = "";
$.each(data.items, function(i, item) {
console.log(item.snippet.resourceId.channelId);
});
var nextPageToken = data.nextPageToken;
if (typeof nextPageToken !== 'undefined')
{
GetInfo(userToken, nextPageToken);
}
},
error: function(xhr, status, error) {
console.log(xhr.responseText);
}
});
}
});
我意识到通常你不应该在 popup.js 中进行 API 调用,但我只想让它工作,然后我会将它移动到后台脚本。
这段代码在第一次执行时效果很好;成功函数执行并记录频道 ID。所以我知道这不是身份验证的问题。但是,当在success 回调中再次调用GetInfo() 函数时,data 参数保持不变。所以我的脚本只是无限期地一遍又一遍地记录第一个回调中的数据。
我想说这是 Javascript 中的闭包问题,但我不知道 ajax 调用中的语法是什么样的。
如果有人能帮忙,那就太好了!
【问题讨论】:
-
现在您必须更改该客户端 ID(保留编辑历史记录)。下次小心点。
-
@Xan 哎呀,很好。我在最初的帖子中将其空白,但我编辑了代码并忘记再次更改它。我会立即更改客户 ID。
标签: javascript ajax google-chrome-extension youtube-api