FB.api () заставляет другие переменные становиться неопределенными - PullRequest
0 голосов
/ 21 июля 2011

У меня небольшие проблемы с SDK Facebook JS, особенно при использовании метода FB.api ().У меня есть список, который заполняется при вызове php-скрипта с использованием JQuery.get (), и вместе с ним для каждого элемента списка приходит идентификатор пользователя Facebook.Существует три типа «элементов списка», которые имеют разные HTML для каждого, и мне нужно сделать вызов FB.api () для каждого элемента, потому что каждый будет приходить от другого пользователя.

Воткод, с которым я сейчас работаю:

function( data ){ 

        // Parse the json data
        var parsed = jQuery.parseJSON( data );

        // Create arrays for each message type
        notifications = parsed.notifications;
        gifts = parsed.gifts;
        requests = parsed.requests;

        // Counter and message to add
        var i = 0;
        var message = '';
        var userData;
        var displayPicUrl = '';

        //
        // NOTIFICATIONS
        //

        if( notifications && notifications.length > 0 ) {

            // Loop through and create a new list item for each notification
            for( i = 0; i < notifications.length; i++ ) {

                // Get originator user data
                FB.api( notifications[i].originator, function( response ) { 

                    userData = response;

                    displayPicUrl = "http://graph.facebook.com/"+userData.id+"/picture";

                    message = '<li class="message">' +
                                '<img src="'+displayPicUrl+'" width="50" height="50" alt="Not one of the five birds I know." title="Not one of the five birds I know" />'+
                                '<p class="messageText">'+notifications[i].message+'.</p>' +
                                '<button class="acceptButton">Ok</button>' +
                                '</li>';

                    document.getElementById( 'notifications' ).innerHTML += message;
                });
            } //end loop

        } //end if

        //
        // GIFTS
        //

        if( gifts && gifts.length > 0 ) {

            // Loop through and create a list item for each gift
            for( i = 0; i < gifts.length; i++ ) {

                FB.api( gifts[i].originator, function( response ) {

                    if( !response || response.error ) {

                        alert( 'An error occured retrieving gifts')

                    } else {

                        userData = response;


                        displayPicUrl = "http://graph.facebook.com/"+userData.id+"/picture";

                        message = '<li class="message">' +
                            '<img src="'+displayPicUrl+'" width="50" height="50" alt="Not one of the five birds I know." title="Not one of the five birds I know" />'+
                            '<img class="giftImage" src="'+gifts[i].url+'" width="50" height="50" title="'+gifts[i].name+'" alt="'+gifts[i].name+'" />' +
                            '<p class="messageText">'+gifts[i].message+'</p>' +
                            '<button class="declineButton giftDecline">Decline</button>' +
                            '<button class="acceptButton giftAccept">Accept Gift</button>' +
                            '<span style="display:none;" id="giftId">'+gifts[i].giftId+'</span>' +
                            '</li>';

                        document.getElementById( 'gifts' ).innerHTML += message;

                    }

                });
            }
        } // end if

        //
        // REQUESTS
        //

        if( requests && requests.length > 0 ) {

            // Loop through and create a list item for each request
            for( i = 0; i < requests.length; i++ ) {

                FB.api( requests[i].originator, function( response ) {

                    if( !response || response.error ) {
                        alert( 'An error occured retrieving Requests' );
                    } else {

                        userData = response;

                        displayPicUrl = "http://graph.facebook.com/"+userData.id+"/picture";

                        message = '<li class="message">' +
                           '<img src="'+displayPicUrl+'" width="50" height="50" alt="Not one of the five birds I know." title="Not one of the five birds I know" />'+
                            '<img class="giftImage" src="'+requests[i].url+'" width="50" height="50" />' +
                            '<p class="messageText">'+requests[i].message+'</p>' +
                            '<button class="declineButton requestDecline">Decline</button>' +
                            '<button class="acceptButton requestAccept">'+requests[i].okButtonLabel+'</button>' +
                            '</li>';

                        document.getElementById( 'requests' ).innerHTML += message;
                    }
                });
            }
        } // end if

Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что, как только она попадает в разделы для подарков и запросов, массивы подарков и запросов становятся «неопределенными», чтостранно, потому что код прекрасно работает, когда он не обернут в обратный вызов FB.api () ... И, как ни странно, эта проблема, похоже, не возникает в разделе уведомлений.Подарки, запросы и уведомления - это просто массивы объектов, возвращаемых из базы данных, как я уже сказал, используя JQuery.get (), и проблем не возникает, пока я не заверну материал в методе api ().

Любая помощьбудет принята с благодарностью.

Приветствия

1 Ответ

0 голосов
/ 21 июля 2011

Если они не определены, только когда они заключены в FB.api(), то вы получаете ошибку на Facebook.Есть много причин, по которым это может произойти, поэтому трудно точно определить точную причину, но я опущу несколько способов, с которыми я справлюсь:

  • Добавить токен доступа вваш вызов в графе, некоторые вызовы в Facebook требуют этого.

  • Вы должны убедиться, что в вашем приложении указан правильный код Facebook.Для HTML включают:

    Вам также необходимо включить этот код в некоторые document.ready вызовы:

    //Facebook iFrame include
    window.fbAsyncInit = function () {
        FB.init({ appId: AppID, status: true, cookie: true, xfbml: true });
        FB.Canvas.setAutoResize();
    };
    
    (function () {
        var e = document.createElement('script');
        e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
    
  • Возможно, проблема в том, как вы настроили это в Facebook.Убедитесь, что все URL совпадают.Если этого не произойдет, то ваше приложение будет выдавать ошибки.Это должно быть точно (www.ex.com и ex.com различаются, и будет работать только один)

Facebook Developers page

Убедитесь, что в разделе «Вкл.Facebook "Canvas URL и Tab URL также совпадают

  • Ваш вызов в графе неверен.Попробуйте добавить alert(displayPicUrl); вызов к вашему коду, он может показать вам, какие ошибки вы получаете.Если это не сработает, попробуйте воспроизвести графический URL-вызов и введите его в себе, чтобы увидеть, что это вернет.

Надеюсь, одна из этих работ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...