我有以下 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/