想要在Div中加载数据后执行脚本

时间:2012-05-26 06:28:02

标签: javascript jquery html document-ready

我有一个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%几率?

1 个答案:

答案 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
}