javascript - 变量范围的问题 (JavaScript)

标签 javascript jquery scope

我有以下 JavaScript(我正在使用 jQuery):

function language(language)
{
    var text = new Object();

    $.ajax({
        type: "GET",
        url: "includes/xml/languages/" + language + ".xml",
        dataType: "xml",
        success: function(xml){
            $(xml).find('text').each(function(){
                text[$(this).attr('id')] = $(this).text();
            });
        }
    });

    return true;
}

我有一个 XML 文件,全类正在阅读该文件。 XML 文件具有如下声明:

    <text id="must_be_string">Must be a string.</text>
    <text id="must_be_number">Must be a number.</text>
    <text id="must_be_integer">Must be an integer.</text>

XML 文件被正确读取,但我遇到的问题是 text 变量似乎没有正常工作。

通过设置一些警报停止点来尝试调试,我发现这就是正在发生的事情:

success: function(xml){ 中,可以正确访问 var text。但是,该函数中用于为文本分配新短语的分配并没有正确添加它。在 success: 中,我可以 alert(text['must_be_string']) 并得到“Must be a string”,但是当我离开 Ajax 调用时,它总是显示“未定义。”

如果我不清楚:

var text = new Object();

$.ajax({
    type: "GET",
    url: "includes/xml/languages/" + language + ".xml",
    dataType: "xml",
    success: function(xml){
        alert(text); // Shows [object Object]
        $(xml).find('text').each(function(){
            text[$(this).attr('id')] = $(this).text();
        });
        alert(text['must_be_string']); // Shows "Must be a string."
    }
});
alert(text['must_be_string']); // Shows undefined -- this is my problem

我真的非常感谢这方面的任何帮助。请解释一下,因为我真的很想了解发生了什么。

最佳答案

ajax调用的success方法是异步调用。当您调用 $.ajax 时,该方法将立即返回并尝试执行 alert(text['must_be_string']);,直到ajax 调用成功,在未来的某个时刻。

希望这对您有所帮助。

关于javascript - 变量范围的问题 (JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/717823/

相关文章:

javascript - 我们如何使用 javascript DOM 更改背景图像的线性渐变?

javascript - 启动后我如何在 Node webkit中获取窗口对象

javascript - 嵌套的 setTimeout() 调用在 JavaScript 中未按正确的顺序运行?

javascript - 如何使用 jQuery 基于 localStorage 预选择选择框和复选框

c - 返回指针的函数

go - 如何在运行时使用从配置文件读取的值初始化全局变量

Python:当我调用 "Sub"时,它不会到达

javascript - 如何从 Angular 中的 BehaviouralSubject 中提取值

javascript - 如何让这个字体选择器在带有选项卡的 Bootstrap 模式中正确显示

javascript - Firefox/IE jQuery 为 (":hover") 无法正常工作