我有一个来自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>";
});
使用此代码,它可以工作,但是如果我删除警报,它将不起作用。警报弹出未定义。好像字符串perName实际包含用户名之前必须被访问一次。我不知道怎么回事。
最佳答案
这很简单。
完成后,FB.api()执行异步请求
function(response) {
//do entire DOM manipulation here
}
被叫。
现在alert()延迟了足够长的执行时间,以便使回调得到calland并定义了perName。
只需将DOM操作代码移到回调中,以确保您确实有响应。