Latey我遇到了一些奇怪的javascript行为的麻烦。我想做这样的事情:
var lang = null;
function getLang() {
if (browserLanguageIsGerman) {
lang = 'de';
}
else {
lang = 'en';
}
// alert(lang) shows "de"
$('#someID').load(someValidUrl, null,
function(response, status, xhr) {
if(languageSettingsOnFacebookIsGerman) {
lang = 'de';
}
else {
lang = 'en';
}
// alert(lang) show "en"
);
// alert(lang) shows "de"
}
第一个和第二个警报显示已过期的值1)“de”2)“en”。第三个警报显示“de”但不应该是“en”?! 第三个警报后,第二个警报也会弹出。
有人可以在我脑海中明显出现错误吗? :)
提前致谢!
答案 0 :(得分:8)
这不是范围问题。 load
方法是异步的。第三个alert
在您传递给load
的回调之前执行。将依赖于该异步调用结果的任何代码移动到回调中。
或者,您可以查看jQuery deferred objects API。请注意,如果您要使用延迟对象API,则需要将呼叫更改为load
来调用jQuery.get
或jQuery.ajax
,因为.load
会返回jQuery,它没有实现Promise接口。
答案 1 :(得分:0)
不,不应该。 “load”不等待来自“someValidUrl”的信息将被提取。相反,它会推迟您的内部函数,以便稍后执行,当信息可用时,立即返回而无需等待。它被称为“异步”。