0

このデータにDIVがあり、サーバーからロードされます。Divにデータがある場合にのみJSを実行したい。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 に答える