Javascript 从facebook接收姓名时遇到问题

Javascript 从facebook接收姓名时遇到问题,javascript,jquery,json,facebook,Javascript,Jquery,Json,Facebook,我有一个来自xml响应的facebook用户id号列表,我所要做的就是编写html,将他们的图片放在他们的名字旁边。不幸的是,我遇到了一个奇怪的问题: var friendList = ""; $(xml).find("id").each(function () { var tId = $(this).text(); var tUrl = "/" + tId; var perName = ""; FB.api(tUrl, function(response) {

我有一个来自xml响应的facebook用户id号列表,我所要做的就是编写html,将他们的图片放在他们的名字旁边。不幸的是,我遇到了一个奇怪的问题:

var friendList = "";
$(xml).find("id").each(function ()
{
    var tId = $(this).text();
    var tUrl = "/" + tId;
    var perName = "";
    FB.api(tUrl, function(response) {
        perName += response.name;
    });
    alert(perName);
    friendList += "<div class=\"picSpacer\"><img src=\"https://graph.facebook.com/"+tId+"/picture/?type=large\" class=\"friendDIV\" /><div class=\"nameBox\">"+perName+"</div></div>";
});
var-friendList=”“;
$(xml).find(“id”).each(函数()
{
var tId=$(this.text();
var tUrl=“/”+tId;
var perName=“”;
FB.api(tUrl、函数(响应){
perName+=response.name;
});
警报(perName);
好友列表+=“”+人名+“”;
});
使用此代码它可以工作,但如果我删除此警报,它将不工作。警报弹出时未定义。这就好像在字符串perName实际包含用户名之前必须访问它一次。我不明白这是怎么回事。

很简单。 api()在异步请求完成时执行异步请求

function(response) { 
    //do entire DOM manipulation here
}
有人打电话来。 现在,alert()将执行延迟足够长的时间,以便回调函数得到calland并定义perName


只需将DOM操纵代码移到回调中,以确保您确实得到了响应。

将DOM操纵行移到回调中会导致根本没有显示任何内容。我不知道您实际上是如何进行操纵的。但是您必须将整个操作例程移动到回调中。应该在我的回答中反映出来