我有这段代码:
$(document).ready(function() {
//<![CDATA[
var who;
FB_RequireFeatures(["Api"], function(){
var who = api.get_session().uid;
alert(who);
});
alert("the uid is: "+who);
//]]>
});
问题:
FB_RequireFeatures block 外部的代码先于其内部的代码执行。
因此 who
的值是未定义的。
我做错了什么?
最佳答案
FB_RequireFeatures
函数似乎正在进行异步调用,因此您没有做任何错误,这就是它的工作方式 - 在请求返回之前调用警报。
您的代码设计方式必须确保仅在请求完成后才调用依赖于 FB_RequireFeatures
函数结果的代码。您可以在回调中调用另一个函数,例如:
var who;
$(document).ready(function() {
FB_RequireFeatures(["Api"], function() {
who = api.get_session().uid;
doSomeOtherStuff();
});
});
function doSomeOtherStuff() {
alert("the uid is: " + who);
}
现在,仅在 FB_RequireFeatures
函数完成后才调用 doSomeOtherStuff
函数,并且您应该在 doSomeOtherStuff
函数内执行以下所有代码 - 这显然,您可以命名为任何您想要的名称。
我将 who
变量移出了 Ready block ,以使其保持在 doSomeOtherStuff
函数的范围内,并从内部函数,以便您引用原始变量而不是创建新变量,否则两者是相同的。
关于JavaScript 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2172668/