Javascript 如何在GoogleEmbedAPI中从函数外部提取变量
我正在尝试从我的谷歌分析账户中提取一些查询数据,我的查询运行得很好。但我遇到了一个问题,我无法实际访问查询数据,因为它位于函数内部。我分配给它的变量日志未定义,这使我相信这是一个范围问题。但是,我一直在使用范围,定义viewSelector函数的内部和外部,但在访问该数据时没有成功 我的问题是:如何从ready函数外部访问viewSelector change函数内部的数据Javascript 如何在GoogleEmbedAPI中从函数外部提取变量,javascript,function,google-analytics,Javascript,Function,Google Analytics,我正在尝试从我的谷歌分析账户中提取一些查询数据,我的查询运行得很好。但我遇到了一个问题,我无法实际访问查询数据,因为它位于函数内部。我分配给它的变量日志未定义,这使我相信这是一个范围问题。但是,我一直在使用范围,定义viewSelector函数的内部和外部,但在访问该数据时没有成功 我的问题是:如何从ready函数外部访问viewSelector change函数内部的数据 <div id="embed-api-auth-container"></div> <div
<div id="embed-api-auth-container"></div>
<div id="view-selector-container"></div>
<script>
(function(w,d,s,g,js,fs){
g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(f){this.q.push(f);}};
js=d.createElement(s);fs=d.getElementsByTagName(s)[0];
js.src='https://apis.google.com/js/platform.js';
fs.parentNode.insertBefore(js,fs);js.onload=function(){g.load('analytics');};
}(window,document,'script'));
var accounts;
gapi.analytics.ready(function() {
gapi.analytics.auth.authorize({
container: 'embed-api-auth-container',
clientid: 'CLIENT_ID'
});
var viewSelector = new gapi.analytics.ViewSelector({
container: 'view-selector-container'
});
viewSelector.on('change', function(ids) {
// "ids" is the data I want to access
accounts = ids;
console.log('1: ' + accounts);
});
viewSelector.execute();
});
// This is where I need to access the data and am unable to
console.log('2: ' + accounts);
</script>
非常感谢 假设ready函数按预期工作,则在函数外部执行的任何代码都不会等待分析就绪。您可能需要修改代码的放置位置:
<script>
(function(w,d,s,g,js,fs){
g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(f){this.q.push(f);}};
js=d.createElement(s);fs=d.getElementsByTagName(s)[0];
js.src='https://apis.google.com/js/platform.js';
fs.parentNode.insertBefore(js,fs);js.onload=function(){g.load('analytics');};
}(window,document,'script'));
var accounts;
gapi.analytics.ready(function() {
gapi.analytics.auth.authorize({
container: 'embed-api-auth-container',
clientid: 'CLIENT_ID'
});
var viewSelector = new gapi.analytics.ViewSelector({
container: 'view-selector-container'
});
viewSelector.on('change', function(ids) {
accounts = ids;
console.log('1: ' + accounts);
});
viewSelector.execute();
// Accounts is ready here:
console.log('2: ' + accounts);
});
// This is where I need to access the data and am unable to
// `gapi.analytics` not ready yet.
</script>
要引用文档,请执行以下操作:
所有其他函数都应该放在ready回调函数中,以便
确保在调用库之前加载库
谢谢,但是我做了轻微的调整,并且accounts仅在viewSelector.on函数中可用。好的,因此该变量不在change函数中,但是,它仅在调用change函数后设置。您可能需要查看JS闭包来了解这里发生了什么。