2011-11-24 93 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"); 
    } 
}); 

};