2012-05-26 1 views
0

У меня есть DIV, в котором эти данные загружаются с сервера. Я хочу, чтобы мой JS выполнялся только тогда, когда в Div есть данные. Данные загружаются с помощью API Facebook,Хотите выполнить скрипт после загрузки данных в 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

Данные загружаются API Facebook – Yahoo

+1

Использование window.onload в сочетании с document.ready является избыточным. Избавьтесь от window.onload и придерживайтесь jQuery. Теперь, как вы получаете данные в этот div? Пожалуйста, опубликуйте этот код, чтобы мы получили полную картину. Удачи! :) – jmort253

ответ

3

Facebook Api делает запрос ajax для получения результатов. Таким образом, этот подход не поможет.

Даже когда окно загружается полностью, данные Facebook обыкновение быть всегда (требуется время, чтобы запросить Ajax и получить результат обратно от facebook сервера)

Кроме того, как @ jmort253 указал,

Использование window.onload в сочетании с document.ready является 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.getLoginStatus() перед вызовом FB.init(). ' – Yahoo

+0

Вы не указали в своем коде' FB.init() '. btw, следуя этому подходу, вы можете вызвать 'FB.getLoginStatus()' при обратном вызове 'FB.init()' – Jashwant

+0

Также убедитесь, что весь этот код работает после 'FB js sdk' i.e. после тега body. – Jashwant