0

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”吗?在第三个警报之后还会弹出第二个警报。

有人可以请我脑海中有明显的错误吗?:)

提前致谢!

4

2 回答 2

8

这不是范围的问题。该load方法是异步的。第三个alert在您传递给的回调之前执行load。将依赖于该异步调用结果的任何代码移动到回调中。

或者,您可以查看jQuery 延迟对象 API。请注意,如果您要使用延迟对象 API,则需要将 call to 更改为loadjQuery.getor的调用jQuery.ajax,因为.load它返回一个不实现 Promise 接口的 jQuery 实例。

于 2012-07-06T13:01:14.400 回答
0

不,不应该。“加载”不会等待从您的“someValidUrl”获取信息。相反,它会将您的内部函数推迟到稍后执行,当信息可用时,并立即返回而无需等待。它被称为“异步”。

于 2012-07-06T13:04:23.637 回答