2013-07-17 51 views
5

我有一个按钮:按钮回调函数

<span id="signinButton"> 
    <span 
    class="g-signin" 
    data-callback="onSignInCallback" 
    data-clientid="CLIENT_ID" 
    data-cookiepolicy="single_host_origin" 
    data-requestvisibleactions="http://schemas.google.com/AddActivity" 
    data-scope="https://www.googleapis.com/auth/plus.login"> 
    </span> 
</span> 

当按下时,这个运行的功能......这在目前熄灭,使一个AJAX后,并打印一些文本带回控制台(只是为了测试,这部分工作):

<script type="text/javascript"> 
var helper = (function() { 
    return { 
     onSignInCallback: function(data) { 

      var dataString = 'access_token=' + data['access_token']; 

      $.ajax({ 
       type: "POST", 
       url: "getdetails", 
       data: dataString, 
       dataType: 'html', 
       timeout: 0, 
       statusCode: { 
        200: function(data){ 
         console.log(data); 
        }, 
        error: function(data){ 
         console.log("There was an error"); 
        } 
       } 
      }); 
     } 
    }; 
})(); 

function onSignInCallback(data) { 
    helper.onSignInCallback(data); 
} 
</script> 

然而,问题是,我每次刷新页面没有点击该按钮时,我的功能运行,并将数据通过AJAX发布和文字得到打印到控制台中。

任何想法为什么会发生这种情况?我想要它(显然),所以这只发生在他们点击按钮时。

我与谷歌加API的工作,从修改后的代码:

https://github.com/googleplus/gplus-quickstart-javascript/blob/master/index.html#L44

+0

奇怪。有时候,这也发生在我身上。 – turnt

回答

5

%的文档该指令:

数据回调 - 在全局命名空间的函数,当登录按钮被呈现并且在登录流程完成后也被调用时被调用。当按钮呈现出现回调,以检查用户是否先前未授权的应用程序,应该可以自动登录。

在设计时,该按钮就会出现(即页面加载)的回调将运行,并且还当按钮被点击时。

解决方法是在第一次运行时设置全局布尔值。

<script type="text/javascript"> 
var first_run = true; 
var helper = (function() { 
    return { 
     onSignInCallback: function(data) { 

      var dataString = 'access_token=' + data['access_token']; 

      $.ajax({ 
       type: "POST", 
       url: "getdetails", 
       data: dataString, 
       dataType: 'html', 
       timeout: 0, 
       statusCode: { 
        200: function(data){ 
         console.log(data); 
        }, 
        error: function(data){ 
         console.log("There was an error"); 
        } 
       } 
      }); 
     } 
    }; 
})(); 

function onSignInCallback(data) { 
    if(!first_run) { 
     helper.onSignInCallback(data); 
    } 
    first_run = false; 
} 
</script> 
+0

甜蜜的作品。无论这是否是用Google Plus API做事的正确方式,我都不知道。但是,它似乎现在工作:)谢谢。 – Alias

2

the Google Plus documentation

如果用户事先同意允许通过此按钮,您的应用程序访问,或代表相同应用的另一个按钮,它们会自动登录的回调函数被自动调用。只要登录按钮被呈现并通过带有访问令牌的新授权对象。

0

我也是这样。在我的全局onSignInCallBack(authResult)函数中,我将调用ajax请求的函数包含在if语句中,该语句检查authResult ['access_token']中的值。我正在使用AngularJs,并将我的Ajax调用移动到我的控制器中。既然你没有使用AngularJS,你可以用你的AJAX调用来替换gplusController()。onSignInCallback(..)行。

function onSignInCallback(authResult){ 
    if (authResult['access_token']) { 
    var afToken = document.getElementById('afToken').getAttribute('data-afToken'); 
    gplusController().onSignInCallback(authResult, afToken); 
    } 
}