Javascript gapi.client.youtube未定义?
我正在尝试将youtube api用于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
<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>