从FB Api JavaScript获取响应

get response from FB Api JavaScript

本文关键字:获取 响应 JavaScript Api FB      更新时间:2023-09-26

我尝试将函数return与facebookapi-requeust结合使用。

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;
}

无论我做什么,我都会得到空洞的回应。。。。请帮忙!

您使用的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 ...
});

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

从异步服务器请求"获取返回值"的常见方法是使用回调函数。

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);
    }
);