gapi.client.youtube未定义?

时间:2014-07-05 11:44:00

标签: javascript youtube youtube-api youtube-javascript-api youtube-data-api

我正在尝试使用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。

有人可以帮我解决他的问题吗?

1 个答案:

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