作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的对象,我已经定义了所有的属性和函数,但它仍然给我这个错误 result is not defined
。
这是我的代码
var Xml = {
to : null,
from : null,
url : null,
result : null, //<--- I defined result here
init: function (fromaddress, toaddress, link) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml();
return this;
},
requestXml: function () {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: this.parseXml
});
},
parseXml: function (xml) {
console.log('xml: ' + $(xml));
result = $(xml); //<--- Assigning value to result here
},
getResult: function () {
console.log('Result: ' + result); // <--- Here is says result is not defined
return result;
}
};
我该如何解决这个问题?
更新
我在下面调用 getResult()
var Route = {
fromurl : null,
tourl : null,
from : null,
to : null,
init: function (fromaddress, toaddress) {
from = fromaddress;
to = toaddress;
fromurl = 'http://demo.com/url'+fromurl;
tourl = 'http://demo.com/url'+tourl;
Route.searchRoute();
},
searchRoute: function () {
var xml = Xml.init(from, to, fromurl);
console.log(xml.getResult()); //<---- calling getResult();
}
};
最佳答案
“未修饰”表达式 result
将引用一个名为 result
的全局变量,您没有。
仅仅因为对 result
的引用在对象内部的文本就假设该引用引用该对象的属性是不正确的。在其他语言中可能是这种情况,但在 JavaScript 中不是。
您的问题的解决方案在问题的评论之一中。在这些情况下,使用 this.
作为前缀是可行的。试试这个代码:
var x = 1;
var p = {
x: 2,
f: function () {alert(x); alert(this.x);}
}
p.f();
在这里您会看到 1 个已收到警报,然后是 2 个。
更新问题的答案
您这里遇到的是一个经典问题。你写
var xml = Xml.init(from, to, fromurl);
console.log(xml.getResult()); //<---- calling getResult();
第一行最终触发了一个 Ajax 请求。一旦该请求被触发,您将立即转到第二行,调用 xml.getResult()
。对 getResult
的调用将在 您的 Ajax 调用能够填充 result
的值之前发生的可能性几乎 100%。
一种方法是将您想要做的事情和结果传递给init
方法。在这种情况下,您似乎想要记录结果,所以请尝试
var xml = Xml.init(from, to, fromurl, function () {console.log(xml.getResult()});
这里我们有一个新的第四个参数给 Xml.init
所以我们必须通过更新 Xml
对象来处理它,像这样(未测试):
.
.
.
init: function (fromaddress, toaddress, link, callback) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml(callback);
return this;
},
requestXml: function (callback) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: callback
});
},
.
.
.
换句话说,当您要进行异步调用时,立即使用结果。不要把它们留到以后再用,因为您永远不知道它们什么时候会“准备好”。
关于javascript - 一直说结果属性未定义。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13285770/
我是一名优秀的程序员,十分优秀!