我正在尝试使用youtube api for javascript并且我正在获取' gapi.client.youtube未定义'。
我已浏览过链接:Why is 'gapi.client.youtube' from Youtube Data Api V3 undefined?,但无法获得太多帮助。
我的代码放在下面:
<script>
function load(){
gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk');
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。
有人可以帮我解决他的问题吗?
答案 0 :(得分:12)
问题是gapi.client.load
方法需要一些时间才能完成,而且它是异步的,所以你的页面(你已经设置为同步)正在运行{{1 youtube库完全加载之前的方法。有两种方法可以解决这个问题。一种是使用load方法的回调参数,如下所示:
searchA()
如果您愿意,还可以在加载回调中包含一个承诺:
<html>
<body>
<script>
function googleApiClientReady(){
gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk');
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>