我正在尝试将 youtube api 用于 javascript,但收到“gapi.client.youtube 未定义”。
我已经浏览过链接:为什么 Youtube Data Api V3 中的“gapi.client.youtube”未定义? https://stackoverflow.com/questions/21171160/why-is-gapi-client-youtube-from-youtube-data-api-v3-undefined,但无法得到太多帮助。
我的代码位于下面:
<script>
function load(){
gapi.client.setApiKey('API_KEY');
gapi.client.load('youtube', 'v3');
searchA();
//alert(gapi.client.youtube.channels);
}
function searchA() {
var q = 'pink floyd';
var request = gapi.client.youtube.channels.list({
part: 'statistics',
forUsername : 'GameSprout'
});
request.execute(function(response) {
var str = JSON.stringify(response.result);
alert(str);
});
}
<script src="https://apis.google.com/js/client.js?onload=load">
但它没有得到gapi.client.youtube。
有人可以帮我解决他的问题吗?
问题是gapi.client.load
方法需要一些时间才能完成,并且它是异步的,因此您的页面(您已将其设置为同步)正在继续并运行searchA()
在 youtube 库完全加载之前的方法。有两种方法可以解决这个问题。一种是使用 load 方法的回调参数,如下所示:
<html>
<body>
<script>
function googleApiClientReady(){
gapi.client.setApiKey('API_KEY');
gapi.client.load('youtube', 'v3', function() {
searchA();
});
}
function searchA() {
var q = 'pink floyd';
var request = gapi.client.youtube.channels.list({
part: 'statistics',
forUsername : 'GameSprout'
});
request.execute(function(response) {
var str = JSON.stringify(response.result);
alert(str);
});
}
</script>
</body>
</html>
如果您愿意,还可以在加载回调周围包含一个承诺:
<html>
<body>
<script>
googleApiClientReady=function() {
loadApi() = function() {
return new Promise(function(resolve,reject){
gapi.client.setApiKey('API_KEY');
gapi.client.load('youtube', 'v3', resolve);
});
};
loadApi().then(function() {
var q = 'pink floyd';
var request = gapi.client.youtube.channels.list({
part: 'statistics',
forUsername : 'GameSprout'
});
request.execute(function(response) {
var str = JSON.stringify(response.result);
alert(str);
});
});
};
</script>
<script src="https://apis.google.com/js/client.js?onload=googleApiClientReady"></script>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)