我今天开始关注Facebook API。我不能说它是多么丑陋和完全不直观,至少它的Javascript实现。无论如何,这是我发现的两件事:
一个。在正确登录并获取access_toekn之后,我整天都在努力获取“未定义”消息,现在当我在调用FB.api('/ me')后尝试编写response.first_name时,我收到了'未定义'消息.....嗯,我烧了我的大脑,直到我在stackoverflow中有人说这个访问令牌应该在通话中传递!但你无法在FB官方文档中找到这个明确指定,甚至没有提到,甚至没有显示参数。所以这有效:
FB.api('/me', {access_token: taccesstokenvalue}, function(response) {
alert(response.first_name); });
湾现在,如果我通过document.write()更改alert(),那么它就什么都不做。 C。 console.log()从未解决过,我试过chrome,firefox,opera。没有
为什么我不能使用document.write?我需要详细地写出API中的很多内容,我该怎么做?
谢谢!
答案 0 :(得分:0)
嗯,我发现了一个解决方案。希望它能帮助其他人...... 我这样解决了:
一个。在身体区域的顶部创建一个表单,隐藏字段称为hAPIresponse和hAccessToken
湾而不是像上面的代码那样尝试在函数()内部转储API响应,而是使用API返回的内容填充隐藏字段,如果需要,可以一个接一个地连接字段,如下所示:
FB.api('/me', {access_token: taccesstokenvalue}, function(response) {
document.getElementById("hAPIresponse").value="first name:" + response.first_name;
document.getElementById("hAccessToken").value="access token:" + taccesstokenvalue;
});
*这里我没有连接任何东西,只是从API获得了first_name属性
℃。 taccesstokenvalue变量来自先前从URL检索它,或者您可以直接通过API检索它。这是手动方法:
function Mid(str, start, len)
{
// Make sure start and len are within proper bounds
if (start < 0 || len < 0) return "";
var iEnd, iLen = String(str).length;
if (start + len > iLen)
iEnd = iLen;
else
iEnd = start + len;
return String(str).substring(start,iEnd);
}
var taccesstoken=window.location.href;
var tvecaux=taccesstoken.split('access_token=');
var taccesstokenvalue=Mid(tvecaux[1],0, tvecaux[1].indexOf('&',0) );
据我所见,当你进入FB.api()时,调用FB.API()调用下面的代码CONTINUES TO EXECUTE,而不是通过函数(响应)。当它认为最好完成时,这个是由它自己的意志异步触发的:)似乎FB开发人员在FB.Init()中添加了sync = true / false属性这么复杂,所以人们用来同步编码赢了就像我一样把头发拉出头来。
希望它有所帮助,我花了将近36个小时的时间尝试做一些简单而愚蠢的事情,比如调用API并从中检索一个值......
同样,这个API不能直观,我不能说够了。我无法想象当我试图将你的评论拉到FB Post回复甚至试图与FB聊天互动时我会发现什么