我尝试将一个函数返回与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;
}
无论我做什么,我得到一个空洞的回答....请帮忙!
答案 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);
}
);