我在FB javascript SDK上创建了fQuery API。到目前为止一切正常,但我现在卡在FB.api电话中。
实际上,我正在尝试使用FB.api函数加载facebook用户对象,即“/ me”。
function somefunc() {
var r = fQuery.load(selector); //selector = "me"
return r;
}
fQuery.load = function( selector ) {
fQuery.fn.response = "";
return FB.api( "/" + selector, function (response) {
// we get response here.
});
}
是否可以返回响应,或者我们可以进行同步呼叫。我已经尝试了很多方法来解决但却无法获得成功。
请提供建议。
答案 0 :(得分:8)
如果你考虑一下,你真的不想让它同步。 Javascript本质上是单线程的,使得异步同步的东西会涉及“冻结”线程,直到异步调用返回。
即使你能做到,也不要相信我。
重新设计代码以使用异步特性而不是与之抗争。你将创造更好的应用程序,拥有更快乐的用户,同时成为更好的编码器。
答案 1 :(得分:4)
如其他地方所述,如果您想在成功响应后打开弹出窗口,进行同步调用很有用,因为浏览器通常会阻止不是直接用户操作的弹出窗口。
您可以通过使用JavaScript手动调用Open Graph API(或按照以下示例使用jQuery)而不是使用Facebook JS SDK来执行此操作。
e.g。通过Open Graph API上传照片,然后提示用户使用弹出窗口将其添加为个人资料图片,而不会阻止弹出窗口:
$.ajax({
type: 'POST',
url: 'https://graph.facebook.com/me/photos',
async: false,
data: {
access_token: '[accessToken]',//received via response.authResponse.accessToken after login
url: '[imageUrl]'
},
success: function(response) {
if (response && !response.error) {
window.open('http://www.facebook.com/photo.php?fbid=' + response.id + '&makeprofile=1');
}
}
});
答案 2 :(得分:-1)
答案 3 :(得分:-5)
我的解决方案是进行递归调用,直到我从FB.api得到我需要的东西