我有一个DIV,这个数据是从服务器加载的。我希望我的JS只在Div中有数据时执行。 Facebook的API正在加载数据
<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 :(得分:3)
Facebook Api执行ajax请求以获取结果。所以,这种方法无济于事。
即使窗口被完全加载,facebook数据也不会一直存在(请求ajax并从facebook服务器返回结果需要时间)
另外,正如@jmort253指出的那样,
将window.onload与document.ready结合使用 冗余。取消window.onload并坚持使用jQuery
仅在facebook api回调中使用你的逻辑。
<强> e.g。强>
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
}