gpt4 book ai didi

javascript - 一直说结果属性未定义。为什么?

转载 作者:行者123 更新时间:2023-11-30 13:12:44 26 4
gpt4 key购买 nike

这是我的对象,我已经定义了所有的属性和函数,但它仍然给我这个错误 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com