【发布时间】:2011-05-12 08:32:11
【问题描述】:
我有一个问题。我一直在尝试解决如何避免使用全局变量的问题。我决定改用一个带有函数的对象,并相应地编写了一个脚本。但是,脚本不会按预期运行:
GetXML: function() {
$.ajax({
type: "GET",
url: "questions.xml",
dataType: "xml",
success: function(xml) {
this.xml=xml;
$(window).trigger("canUseXML");
var docLength = $(xml).find('Question').length + 1;
alert("this really is an '" + this.xml + "' and the actual doclength is: " + docLength)//This is the first alert I mention.
} //close success
});//close AJAX
alert("yes! this is still a: " +this.xml) //This is the second alert I mention.
},
如果一切都按预期运行,则两个警报都会生成一个“对象 XMLDocument”(在此行的其他位置声明的变量:this.xml = null;)。第一个按预期运行。但是,第二个,在该函数之外,返回值“null”。为什么?
谢谢,艾略特·邦纳维尔
附:在函数之间传递变量这个看似简单的问题上,我已经坚持了一周。
【问题讨论】:
-
请用您使用的任何语言标记它
-
语言是什么?您应该将其放入标签中以使其清楚。
-
此外,诸如“一个简单的逻辑错误”之类的标题(例如“我有一个错误”、“这是一个问题”、“请修复我的代码”等)并没有真正有助于 SO未来的用户扫描相关文章的标题。我恭敬地建议使用更具描述性的标题(例如“访问其值在 AJAX 函数中设置的变量”)
-
感谢您的建议和礼貌的表达方式。遵循建议。
-
问题仅仅是在 AJAX 调用完成并设置
this.xml之前第二个警报正在访问this.xml吗?由于 AJAX 是异步,因此似乎需要将第二个警报推迟到确定调用完成为止。
标签: javascript jquery object methods global-variables