我有以下代码片段:
var myParams = {
'clientid' : 'XXXXX.apps.googleusercontent.com',
'cookiepolicy' : 'single_host_origin',
'callback' : _.bind(function(response){ this._loginGoogleCb(response); }, this),
'scope' : 'https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/plus.profile.emails.read',
'requestvisibleactions' : 'http://schemas.google.com/AddActivity'
};
gapi.auth.signIn(myParams);
第一次单击按钮并执行此代码时,没有问题 但是当我第二次单击该按钮时,回调(并且只有回调)会被执行两次 每次执行此代码时,对Google服务器(以及相关回调)的请求数量都会增加1.
我仔细检查过,调用函数本身只在重复时执行一次 按钮单击本身不是问题。
知道可能是什么问题吗?
答案 0 :(得分:2)
从this文章中可以看出,有三种不同的状态方法:
:
{
"id_token": string,
"access_token": string,
"expires_in": string,
"error": string
"status": { /* object */
"google_logged_in" : boolean,
"signed_in" : boolean,
"method" : string /* null, PROMPT, or AUTO */
}
}
正在发生的事情是,当您第一次登录时,只会触发其中一种状态方法(“PROMPT”),但当再次按下该按钮时会触发两种状态方法(“PROMPT”和“AUTO”)。
可以找到用于处理这些状态方法的示例“signinCallback”代码here。
此外,如果您多次调用下划线的绑定功能,则绑定功能也将被多次调用。因此,您看到“对Google服务器(以及相关回调)的请求数量增加的原因为1”。我建议将这个调用封装在另一个函数中,并包含一个保护条件来阻止多次调用。