Javascript gapi.client.youtube未定义?

Javascript gapi.client.youtube未定义?,javascript,youtube,youtube-api,youtube-javascript-api,youtube-data-api,Javascript,Youtube,Youtube Api,Youtube Javascript Api,Youtube Data Api,我正在尝试将youtube api用于javascript,并得到“gapi.client.youtube未定义” 我已经浏览了链接:,但没有得到多少帮助 我的代码放在下面: <script> function load(){ gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk'); gapi.client.load('youtube', 'v3

我正在尝试将youtube api用于javascript,并得到“gapi.client.youtube未定义”

我已经浏览了链接:,但没有得到多少帮助

我的代码放在下面:

    <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);
     });

函数加载(){
gapi.client.setApiKey('aizasyarvwirfktei_BTaKcCi9Ja-m3IEJYIRk');
load('youtube','v3');
searchA();
//警报(gapi.client.youtube.channels);
}
函数searchA(){
var q=‘平克·弗洛伊德’;
var request=gapi.client.youtube.channels.list({
第:"统计数字",,
forUsername:“GameSpout”
});
请求.执行(函数(响应){
var str=JSON.stringify(response.result);
警报(str);
});
}


但它没有得到gapi.client.youtube


有人能帮我解决这个问题吗?

问题是,
gapi.client.load
方法需要一点时间才能完成,而且它是异步的,所以在youtube库完全加载之前,您的页面(您已经设置为同步)正在运行
searchA()
方法。有两种方法可以解决这个问题。一种是使用load方法的callback参数,如下所示:

<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>

函数googleApiClientReady(){
gapi.client.setApiKey('aizasyarvwirfktei_BTaKcCi9Ja-m3IEJYIRk');
load('youtube','v3',function(){
searchA();
});
}
函数searchA(){
var q=‘平克·弗洛伊德’;
var request=gapi.client.youtube.channels.list({
第:"统计数字",,
forUsername:“GameSpout”
});
请求.执行(函数(响应){
var str=JSON.stringify(response.result);
警报(str);
});
}

如果您愿意,还可以在加载回调周围包装一个承诺:

<html>
<body>
    <script>
        googleApiClientReady=function() {
          loadApi() = function() {
                return new Promise(function(resolve,reject){
                        gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk');
                        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>

googleapiclientraday=函数(){
loadApi()=函数(){
返回新承诺(功能(解决、拒绝){
gapi.client.setApiKey('aizasyarvwirfktei_BTaKcCi9Ja-m3IEJYIRk');
load('youtube','v3',resolve);
});
};
loadApi()。然后(函数(){
var q=‘平克·弗洛伊德’;
var request=gapi.client.youtube.channels.list({
第:"统计数字",,
forUsername:“GameSpout”
});
请求.执行(函数(响应){
var str=JSON.stringify(response.result);
警报(str);
});
});
};

谢谢!我还试着让它在执行之前等待一些时间,它成功了。我建议不要公开共享API密钥,因为这可能会让API被劫持。如果您的API密钥被劫持,您可以在谷歌云控制台中禁用它。
<html>
<body>
    <script>
        googleApiClientReady=function() {
          loadApi() = function() {
                return new Promise(function(resolve,reject){
                        gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk');
                        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>