Сроки AJAX звонков в Facebook API - PullRequest
0 голосов
/ 15 августа 2011

Итак, у меня есть некоторый код, где я получаю идентификатор пользователя, вошедшего в систему, через их API. Это выглядит так:

var facebookId = "";
facebookId = getFBIdSafe();

Вызов метода для получения выглядит следующим образом:

function getFBIdSafe()
{
    FB.api('/me', function(response) {
        if (!response || response.error) {
            return "";
        } else {
            return response.id;
        }
    });
}

Что происходит, я вызываю этот метод, как я показал выше, а затем иду и делаю другие вещи, одной из которых является вызов AJAX на мой собственный сервер, передающий facebookId, который был «установлен». Проблема в том, что она никогда не устанавливается.

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

P.S. Он не выполняет этот код, если пользователь не вошел в Facebook в первую очередь - эта проверка происходит на основе маркера состояния на сайте - так что это не та же проблема.

1 Ответ

1 голос
/ 15 августа 2011

Если вы хотите избежать получения идентификатора FB текущего пользователя, то вам следует отложить все вызовы сервера до получения идентификатора. Если у вас есть jQuery или вы хотите использовать jQuery, вы можете использовать $. Deferred () , чтобы отложить все вызовы вашего сервера до получения идентификатора FB. Я предлагаю сделать что-то вроде этого:

var FBIdLoad = $.Deferred();
function getFBIdSafe()
{
    FB.api('/me', function(response) {
        if (!response || response.error) {
            FBIdLoad.resolveWith("");
        } else {
            FBIdLoad.resolveWith(response.id);
        }
    });
}

[...]

FBIdLoad.done(function(FBId){
  /* Your server call with the Id */
}

Все функции, переданные в FBIdLoad.done, будут автоматически выполняться, если объект уже был разрешен (когда FB.Api отвечает идентификатором), и всегда получают запрошенный идентификатор.

Надеюсь, это поможет,

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