得到FB Api JavaScript的回复

时间:2012-03-09 16:09:13

标签: javascript facebook-graph-api

我尝试将一个函数返回与facebook api reqeust结合使用。

var g_ret = true;

function uploadImagesFbCounter(anz){
    var gid='';
    $("div[id ^= 'gallerydetail']").each(function (i) {
        gid = this.id.split('-');
        gid = parseInt(gid[1]);
    })
    if(gid==0) return true;

    FB.api('/me', function(response) {

        //console.log(response);
        var uid = response.id;

        if(!anz){
            g_ret = $.ajax({
                type: "POST",
                async:false,
                url: "api/gallerie_anz_speich.php",
                data: "uid="+uid+"&op=get&gid="+gid
            });

            if(g_ret.response >= 20)    {
                g_ret = false;
            }
        }   else    {
            g_ret = $.ajax({
                type: "POST",
                async:false,
                url: "api/gallerie_anz_speich.php",
                data: "uid="+uid+"&op=set&gid="+gid
            });
            //console.log(g_ret.response);
            g_ret = '<span style="padding:0 5px;">Noch '+(20-g_ret.response)+'Fotos</span>';
            console.log(g_ret);
        }
    });

    return g_ret;
}
无论我做什么,我得到一个空洞的回答....请帮忙!

2 个答案:

答案 0 :(得分:3)

您使用的API是异步。你无法从函数中返回一个值;在这种情况下,这是不可能的。

相反,编写您的API以便其客户端将其传递给可调用函数。在Facebook API回调中,您可以调用该函数并将其传递给“g_ret”字符串。

function uploadImagesFbCounter(anz, callback){
  // ...
  FB.api('/me', function(response) {
    // ...
    callback(g_ret);
  });
}

然后当你调用你的函数时,而不是:

var result = uploadImagesFbCounter( whatever );
// ... do something with result ...
你会这样做:

uploadImagesFbCounter( whatever, function( result ) {
  // ... do something with result ...
});

答案 1 :(得分:1)

从Facebook的服务器获取用户信息是异步的。这意味着,您在FB.api()之后编写的任何代码都不会等待Facebook回复。您的浏览器不会被阻止只是为了等待Facebook的服务器。这与AJAX的概念相同,我相信你很熟悉,因为我看到你在代码中使用它。

获得回报价值的常用方法&#34;从异步服务器请求是使用回调函数。

function uploadImagesFbCounter(anz, onSuccess){
    var gid='';
    $("div[id ^= 'gallerydetail']").each(function (i) {
        gid = this.id.split('-');
        gid = parseInt(gid[1]);
    })
    if(gid==0) return true;

    FB.api('/me', function(response) {

        //console.log(response);
        var uid = response.id;

        if(!anz){
            g_ret = $.ajax({
                type: "POST",
                async:false,
                url: "api/gallerie_anz_speich.php",
                data: "uid="+uid+"&op=get&gid="+gid
            });

            if(g_ret.response >= 20)    {
                g_ret = false;
            }
        }   else    {
            g_ret = $.ajax({
                type: "POST",
                async:false,
                url: "api/gallerie_anz_speich.php",
                data: "uid="+uid+"&op=set&gid="+gid
            });
            //console.log(g_ret.response);
            g_ret = '<span style="padding:0 5px;">Noch '+(20-g_ret.response)+'Fotos</span>';
            console.log(g_ret);
        }

        onSuccess(g_ret);
    });

}


uploadImagesFbCounter(
    whateverAnzIs, 
    function(g_ret) {
        console.info(g_ret);
    }
);