Асинхронный обратный вызов графа Facebook - PullRequest
0 голосов
/ 02 февраля 2012

Хорошо, я ломал голову над этим в течение нескольких дней.Это проблема:

  1. Я использую API Facebooks для извлечения изображений из определенного альбома.
  2. Использование JCarousel (http://sorgalla.com/projects/jcarousel/), Я хотел бы динамически добавлять картинки из Facebook в карусель.
  3. Проблема в том, что, поскольку API Facebook является асинхронным , частькода, который выполняет карусель, требует информацию (URL-адреса изображений), которая еще не доступна.

Обходное решение какого-либо рода заключается в использовании окна предупреждения для принудительной задержки, этопозволяет при запросе API Facebook " догнать ", когда вы подтверждаете предупреждение, и вот, изображения появляются внутри карусели!

Есть ли вообще возможность решить эту проблему. ПослеВ ходе исследования я сталкивался с проблемами similair, решаемыми с помощью функции " Callback ".

Я новичок в области кодирования, поэтому любая помощь будет чрезвычайно полезна.

Iя пытаюсь изменить эту страницу для потокового видеоизображения для электронных книг: http://sorgalla.com/projects/jcarousel/examples/dynamic_javascript.html

Также для выполнения этой работы вам также понадобится скрипт Javascript SDK Facebook

 <script src="//connect.facebook.net/en_US/all.js"></script>

Вам также понадобится Jquery.

Наконецниже приведен пример моего кода, часть которого не работает:

$(document).ready(function() {
//the below is an Asynchronous request to facebook

FB.api('/232137976851458' + '/photos', function(response) {
for (i=0;i<=response.data.length;i++)
    {
    mycarousel_itemList[i] =  {url: response.data[i].picture, title: "2"};
    }
});

//the alert below is used as a forced break to allow the api to stream the required information, if we remove this alert, the images refuse to load into the carousel

alert("test");

//after the pictures are retrieved from the facebook API, the mycarousel_itemList array will be used to dynamically add the pictures into a carousel.....the code to instantiate the carousel is below

jQuery('#mycarousel').jcarousel({
    size: mycarousel_itemList.length,
    wrap: "circular",
    itemLoadCallback: {onBeforeAnimation: mycarousel_itemLoadCallback}
});

});

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Предупреждение не требуется, если вы переместите вызов jcarousel в обратный вызов

   FB.api('/232137976851458' + '/photos', function(response) {
        for (i=0;i<=response.data.length;i++)
        {
            mycarousel_itemList[i] =  {url: response.data[i].picture, title: "2"};
        }

        jQuery('#mycarousel').jcarousel({
            size: mycarousel_itemList.length,
            wrap: "circular",
            itemLoadCallback: {onBeforeAnimation: mycarousel_itemLoadCallback}
        });

    });
0 голосов
/ 03 февраля 2012

Большое спасибо за быстрый ответ DMCS - вышеизложенное не сработало, но дало мне идею, которая в итоге привела меня к решению.

Когда я поставилинстанцирование Caroussel внутри цикла For, это сработало, потому что сама Carousel измеряет сумму, если элементы основаны на длине массива, которая сбрасывается на каждом шаге цикла for, поэтому она перезаписывается с отключением самой последней информацииAPI-асинхронный запрос.Вот рабочий ответ:

FB.api('/232137976851458' + '/photos', function(response) {
    for (i=0;i<=response.data.length;i++)
    {
        mycarousel_itemList[i] =  {url: response.data[i].picture, title: "2"};

        jQuery('#mycarousel').jcarousel({
            wrap: "circular",
            size: mycarousel_itemList.length,
            itemLoadCallback: {onBeforeAnimation: mycarousel_itemLoadCallback}
        });
    }       
})
...