gapi.client.youtube 未定义?

2024-04-05

我正在尝试将 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(使用前将#替换为@)

gapi.client.youtube 未定义? 的相关文章

随机推荐