0

我有一个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% 的机会它的空白?

4

1 回答 1

3

Facebook Api 执行 ajax 请求以获取结果。因此,这种方法无济于事。

即使窗口完全加载,facebook 数据也不会一直存在(请求 ajax 并从 facebook 服务器返回结果需要时间)

此外,正如@jmort253 指出的那样,

将 window.onload 与 document.ready 结合使用是多余的。摆脱 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
}
于 2012-05-26T06:49:25.003 回答