Facebook graph api Facebook API Javascript:document.write()不';不行?

Facebook graph api Facebook API Javascript:document.write()不';不行?,facebook-graph-api,Facebook Graph Api,我今天开始研究Facebook API。我不能说它有多么丑陋和完全不直观,至少它的Javascript实现是如此。总之,我发现了两件事: a。在正确登录并获得访问权限后,我一整天都在努力获取“未定义”的消息,现在当我尝试编写响应时。在调用FB.api('/me')后,我得到了“未定义”的消息。。。。。嗯,我伤了脑筋,直到有人在stackoverflow说应该在通话中传递访问令牌!但在FB官方文档中找不到明确的说明,甚至没有提及,甚至没有显示参数。所以这是可行的: FB.api('/me', {a

我今天开始研究Facebook API。我不能说它有多么丑陋和完全不直观,至少它的Javascript实现是如此。总之,我发现了两件事:

a。在正确登录并获得访问权限后,我一整天都在努力获取“未定义”的消息,现在当我尝试编写响应时。在调用FB.api('/me')后,我得到了“未定义”的消息。。。。。嗯,我伤了脑筋,直到有人在stackoverflow说应该在通话中传递访问令牌!但在FB官方文档中找不到明确的说明,甚至没有提及,甚至没有显示参数。所以这是可行的:

FB.api('/me', {access_token: taccesstokenvalue}, function(response) {    
alert(response.first_name); });
b。现在,如果我通过document.write()更改alert(),那么它什么也不做。 Clog()一直没用,我在chrome、firefox和opera上试过。没什么

为什么我不能使用document.write?我需要详细地编写API中的许多内容,我该怎么做


谢谢

我想我找到了一个解决办法。希望它能帮助其他人。。。 我是这样解决的:

a。在主体区域顶部创建一个表单,其中包含名为hAPIresponse和hAccessToken的隐藏字段

b。不要像上面的代码那样尝试在函数()内部转储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属性

c。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) );
功能Mid(str、start、len)
{
//确保start和len在适当的范围内
if(start<0 | | len<0)返回“”;
变量iEnd,iLen=字符串(str).length;
如果(开始+长>长)
iEnd=iLen;
其他的
iEnd=开始+长度;
返回字符串(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()调用下面执行,而不是通过函数(响应)执行。这一个是由它自己的意愿异步触发的,当它认为最好完成时:)对于FB开发人员来说,在FB.Init()中添加sync=true/false属性似乎太复杂了,所以以前用于同步编码的人不会像我一样毛骨悚然

希望它能帮助一些人,我花了近36个小时试图做一些如此简单和愚蠢的事情,比如调用API并从中检索值

再说一次,这个API非常直观,我说得太多了。我无法想象当我试图将coments拉到FB帖子回复,甚至试图与FB聊天互动时会发现什么