2011-11-24 84 views
1

我使用的代码:Facebook的JavaScript执行两次,但应该只运行一次

http://thinkdiff.net/demo/newfbconnect1/jssdkouth2.html

给Facebook融入我的应用程序,我有以下功能:

function login(response, info){ 
    if (response.authResponse) { 
     showLoader(true); 
     var accessToken         = response.authResponse.accessToken;  

     fqlQuery(); 

     userInfo.innerHTML        = 'Logged in'; 
     document.getElementById("fb-auth").setAttribute("class", "fb_logout"); 
     showLoader(false); 
     document.getElementById('other').style.display = "block"; 
    } 
} 


function fqlQuery(){ 
    FB.api('/me', function(response) { 
     //http://developers.facebook.com/docs/reference/fql/user/ 
     var query  = FB.Data.query('select email from user where uid={0}', response.id);  
      alert("test"); 

    }); 
}; 

我遇到的问题是当我登录函数fqlquery运行,除了它运行两次我该如何防止? (即两次在屏幕上测试弹出窗口)。

感谢

回答

0

两次运行这段代码的问题是最可能的原因包括你的页面上的SDK的多个版本;例如包括一个以上的按钮,包括一个社交插件和初始化应用程序等。

您可以解决SDK初始化问题多次,或者您可以在fqlQuery函数中添加一个互斥排除检查,它从运行不止一次:

function login(response, info){ 
    if (response.authResponse) { 
     showLoader(true); 
     var accessToken = response.authResponse.accessToken;  

     fqlQuery(); 

     userInfo.innerHTML        = 'Logged in'; 
     document.getElementById("fb-auth").setAttribute("class", "fb_logout"); 
     showLoader(false); 
     document.getElementById('other').style.display = "block"; 
    } 
} 
var hasRun = false; 
function fqlQuery(){ 
    if (hasRun === false) { 
     hasRun = true; 
     FB.api('/me', function(response) { 
      //http://developers.facebook.com/docs/reference/fql/user/ 
      var query = FB.Data.query('select email from user where uid={0}', response.id);  
      alert("test"); 
    } 
}); 

};