Javascript 访问其值在AJAX函数中设置的变量
我有个问题。我一直在试图解决如何避免使用全局变量的问题。我决定使用一个带有函数的对象,并相应地编写了一个脚本。但是,脚本不会按预期运行:Javascript 访问其值在AJAX函数中设置的变量,javascript,jquery,object,methods,global-variables,Javascript,Jquery,Object,Methods,Global Variables,我有个问题。我一直在试图解决如何避免使用全局变量的问题。我决定使用一个带有函数的对象,并相应地编写了一个脚本。但是,脚本不会按预期运行: GetXML: function() { $.ajax({ type: "GET", url: "questions.xml", dataType: "xml", success: function(xml) { th
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.
},
如果所有警报都按预期运行,则这两个警报都将产生“object XMLDocument”(此行中其他地方声明的变量:this.xml=null;
)。第一次按预期运行。但是,该函数之外的第二个函数返回值“null”。为什么?
谢谢,埃利奥特·博纳维尔
另外,一周来,我一直在讨论在函数之间传递变量这一看似简单的问题。这可能是因为ajax需要时间来处理。Javascript不会在执行下一个命令之前等待一个请求,因此在调用AJAX时,它会试图找出this.xml发生了什么 这可能是因为ajax需要时间来处理。Javascript不会在执行下一个命令之前等待一个请求,因此在调用AJAX时,它会试图找出this.xml发生了什么 范围界定。 一旦您离开匿名函数(xml),这个.xml就不再存在。范围界定。 一旦您离开匿名函数(xml),this.xml就不再存在。在JavaScript中,“this”总是指所执行函数的“所有者”,或者更确切地说,指函数作为方法的对象。所以你的第一个和第二个“this”指的不是同一件事 假设“success”函数在第二个警报之前执行(它可能没有执行)。你可以这样做:
GetXML: function() {
var that=this;
.
.
然后使用“that”而不是“this”。在JavaScript中,“this”总是指所执行函数的“所有者”,或者更确切地说,指函数作为方法的对象。所以你的第一个和第二个“this”指的不是同一件事
假设“success”函数在第二个警报之前执行(它可能没有执行)。你可以这样做:
GetXML: function() {
var that=this;
.
.
然后用“那个”代替“这个”。您有两个问题:
回调中的此
不是作为成员的GetXML
对象。使用类似于me=this的东西在对象的构造函数中使用code>,然后使用me
而不是this
来明确设置值
警报(“是的!这仍然是一个:”+this.xml)
,而回调尚未执行你有两个问题:
回调中的此
不是作为成员的GetXML
对象。使用类似于me=this的东西在对象的构造函数中使用code>,然后使用me
而不是this
来明确设置值
警报(“是的!这仍然是一个:”+this.xml)
,而回调尚未执行请用你正在使用的任何语言来标记这是什么语言?你应该把它放在标签里,让它清楚。此外,像“一个简单的逻辑错误”(例如,“我有一个错误”,“这里有一个问题”,“请修复我的代码”,等等)这样的标题并不能真正帮助未来的用户扫描相关文章的标题。我恭敬地建议使用更具描述性的标题(例如“访问在AJAX函数中设置值的变量”),感谢您的建议和礼貌的表达方式。以下建议。问题是否仅仅是第二个警报在AJAX调用完成并设置
this.xml
之前访问this.xml
?由于AJAX是异步的,第二个警报似乎需要推迟到调用确定完成为止。请使用您正在使用的任何语言对此进行标记。语言是什么?你应该把它放在标签里,让它清楚。此外,像“一个简单的逻辑错误”(例如,“我有一个错误”,“这里有一个问题”,“请修复我的代码”,等等)这样的标题并不能真正帮助未来的用户扫描相关文章的标题。我恭敬地建议使用更具描述性的标题(例如“访问在AJAX函数中设置值的变量”),感谢您的建议和礼貌的表达方式。以下建议。问题是否仅仅是第二个警报在AJAX调用完成并设置this.xml
之前访问this.xml
?因为AJAX是异步的,所以第二个警报似乎需要推迟到调用确定完成时才发出。不,因为正如我前面所说的,这个变量在代码的前面声明过。作用域问题是此对象及其方法旨在防止的问题。是和否:this.xml
确实存在,但匿名函数内部的this
不同于它外部的this
。是否提前声明它并不重要。函数内部和函数外部是不同的,真的吗?这解释了很多事情。不,因为正如我前面所说的,这个变量在代码的前面声明过。作用域问题是此对象及其方法旨在防止的问题。是和否:this.xml
确实存在,但匿名函数内部的this
不同于它外部的this
。是否提前声明它并不重要。函数内部和函数外部是不同的,真的吗?这就解释了很多事情。当我声明“That”时,我在Firebug中得到了“missing:after property id”,我的警报不起作用。为什么?