2012-05-26 40 views
0

我在這個數據中有一個DIV從服務器加載。我希望我的JS只有在Div中有數據時才能執行。數據是由Facebook的API想要在加載數據後執行腳本Div

<Div id='profilePicsDiv' > DATA</div> 

JS加載

$(document).ready(function() { 

    FB.getLoginStatus(function (response) { 
     var profilePicsDiv = document.getElementById('profile_pics'); 
     FB.api({ 
      method: 'friends.get' 
     }, function (result) { 

      // var result =resultF.data; 
      // console.log(result); 
      var user_ids = ""; 
      var totalFriends = result.length; 
      // console.log(totalFriends); 
      var numFriends = result ? Math.min(25, result.length) : 0; 
      // console.log(numFriends); 
      if (numFriends > 0) { 
       for (var i = 0; i < numFriends; i++) { 
        var randNo = Math.floor(Math.random() * (totalFriends + 1)) 
        user_ids += (',' + result[randNo]); 
        randNo++; 
        if (randNo >= totalFriends) { 
         randNo = 0; 
        } 
        // console.log(user_ids); 
       } 
      } 
      profilePicsDiv.innerHTML = user_ids; 
     }); 
    }); 

} 

現在我想之後的數據加載到執行該

$(document).ready(function() { 
    var user_ids = document.getElementById('profile_pics').innerHTML; 

    if (user_ids == '') {} else 

    { 
     FB.ui({ 
      method: 'apprequests', 
      message: 'See anyones secret hidden pictures :)', 
      to: user_ids, 
      /// How to Fill the ID's HERE ? 
     }, requestCallback); 
    } 
} 

function requestCallback(response) { 
    // Handle callback here 
} 

}); 

不過80%,我得到警報作空白, 20%的時間我得到的價值,我可以做一些事情,這個函數執行後,它肯定有數據,並避免80%的機會,其空白?

+0

你的意思是,數據是通過AJAX一定的時間間隔後裝?並且這反覆發生? –

+0

正在通過Facebook的API加載數據 – Yahoo

+1

將window.onload與document.ready結合使用是多餘的。擺脫window.onload並堅持jQuery。現在,你如何獲得數據到該div?請張貼該代碼,以便我們獲得完整的圖片。祝你好運! :) – jmort253

回答

3

Facebook Api會執行ajax請求來獲取結果。所以,這種方法不會幫助。

即使窗口完全加載,Facebook的數據不會在那裏總是(它需要時間來請求Ajax和從Facebook服務器獲取結果返回)

此外,作爲@ jmort253指出,

與的document.ready結合使用的window.onload是 redundant.Get擺脫在window.onload和堅持的jQuery

請在Facebook上只回調API,你的邏輯。

例如

FB.api('/me/friends?fields=name,first_name,gender,picture,relationship_status,birthday', function(response) { 
     // Do your logic here 

    }) 

編輯

你應該做這樣的事情,

$(document).ready(function() { 
    FB.getLoginStatus(function (response) { 
    var profilePicsDiv = document.getElementById('profile_pics'); 
    FB.api({ 
     method: 'friends.get' 
    }, function (result) { 

     // var result =resultF.data; 
     // console.log(result); 
     var user_ids = ""; 
     var totalFriends = result.length; 
     // console.log(totalFriends); 
     var numFriends = result ? Math.min(25, result.length) : 0; 
     // console.log(numFriends); 
     if (numFriends > 0) { 
      for (var i = 0; i < numFriends; i++) { 
       var randNo = Math.floor(Math.random() * (totalFriends + 1)) 
       user_ids += (',' + result[randNo]); 
       randNo++; 
       if (randNo >= totalFriends) { 
        randNo = 0; 
       } 
       // console.log(user_ids); 
      } 
     } 
     profilePicsDiv.innerHTML = user_ids; 
     FB.ui({ 
     method: 'apprequests', 
     message: 'See anyones secret hidden pictures :)', 
     to: user_ids, 
     /// How to Fill the ID's HERE ? 
     }, requestCallback); 

    }); 
}); 

}); 
function requestCallback(response) { 
    // Handle callback here 
} 
+0

在這種情況下,我調用FB.init()之前調用了'FB.getLoginStatus()。 ' – Yahoo

+0

你的代碼中沒有提到'FB.init()'。順便說一句,你可以在FB.init()的回調函數中調用'FB.getLoginStatus()' – Jashwant

+0

另外,確保整個代碼在'FB js sdk'之後運行,也就是'body'標籤之後。 – Jashwant