javascript解析
我有一段代码:javascript解析,javascript,Javascript,我有一段代码: $(document).ready(function() { //<![CDATA[ var who; FB_RequireFeatures(["Api"], function(){ var who = api.get_session().uid; alert(who); }); alert("the uid is: "+who); //]]> });
$(document).ready(function() {
//<![CDATA[
var who;
FB_RequireFeatures(["Api"], function(){
var who = api.get_session().uid;
alert(who);
});
alert("the uid is: "+who);
//]]>
});
$(文档).ready(函数(){
//
});
问题是:
FB_RequireFeatures块外部的代码在其内部代码之前执行。
因此,who
的值是未定义的
我做错了什么?FB\u RequireFeatures函数似乎正在进行异步调用,因此您没有做错任何事情,这就是它的工作方式-在请求返回之前调用警报 您必须设计代码,使依赖于
FB\u RequireFeatures
函数结果的代码仅在请求完成后调用。您可以在回调函数中调用另一个函数,例如:
var who;
$(document).ready(function() {
FB_RequireFeatures(["Api"], function() {
who = api.get_session().uid;
doSomeOtherStuff();
});
});
function doSomeOtherStuff() {
alert("the uid is: " + who);
}
现在,doSomeOtherStuff
函数只有在FB\u RequireFeatures
函数完成后才被调用,您应该在doSomeOtherStuff
函数中执行以下所有代码–显然,您可以将其命名为任何您想要的代码
我将
who
变量移出ready块,以将其保留在doSomeOtherStuff
函数的范围内,并从内部函数中删除var
,以便您引用原始变量,而不是创建新变量,否则也一样。FB\u RequireFeatures函数似乎正在进行异步调用,因此您没有做错任何事情,这就是它的工作方式-在请求返回之前调用警报
您必须设计代码,使依赖于FB\u RequireFeatures
函数结果的代码仅在请求完成后调用。您可以在回调函数中调用另一个函数,例如:
var who;
$(document).ready(function() {
FB_RequireFeatures(["Api"], function() {
who = api.get_session().uid;
doSomeOtherStuff();
});
});
function doSomeOtherStuff() {
alert("the uid is: " + who);
}
现在,doSomeOtherStuff
函数只有在FB\u RequireFeatures
函数完成后才被调用,您应该在doSomeOtherStuff
函数中执行以下所有代码–显然,您可以将其命名为任何您想要的代码
我将
who
变量移出ready块,以将其保留在doSomeOtherStuff
函数的范围内,并从内部函数中删除var
,以便您引用原始变量,而不是创建新变量,否则它是相同的。您正在创建一个新的本地who
变量。从设置who的位置删除var
。此外,在对FB_RequireFeatures函数的回调运行之前,您不能引用who
。您正在创建一个新的本地who
变量。从设置who的位置删除var
。此外,在对FB_RequireFeatures函数的回调运行之前,您不能引用谁
。如何确保函数后面的代码在FB_RequireFeatures请求完成后得到执行?这确实有些帮助。但是可以做些什么让FB_RequireFeatures之后的代码显式地等待FB_RequireFeatures完成吗?我尝试了上面的方法。出于某种原因,someotherfunction()中的代码仍在ajax调用完成之前执行?@amit:不,不能将异步执行代码转换为同步执行代码,反之亦然。当FB\u RequireFeatures
完成时,所有要运行的代码都必须作为回调函数传递给它。如何确保函数后面的代码在FB\u RequireFeatures完成请求后执行?这确实有点帮助。但是可以做些什么让FB_RequireFeatures之后的代码显式地等待FB_RequireFeatures完成吗?我尝试了上面的方法。出于某种原因,someotherfunction()中的代码仍在ajax调用完成之前执行?@amit:不,不能将异步执行代码转换为同步执行代码,反之亦然。当FB\u RequiresFeatures
完成时,所有要运行的代码都必须作为回调函数传递给它。