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

2023-12-02

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

我怎么解决这个问题?

Update

我在下面调用 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()。接到电话的可能性接近 100%getResult将会发生before您的 Ajax 调用能够填写以下值result.

一种方法是传递你想要的东西do结果为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
    });
},

.
.
.

换句话说,当您要进行异步调用时,请立即使用结果。不要把它们留到以后使用,因为你永远不知道它们什么时候会“准备好”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一直说结果属性未定义。为什么? 的相关文章

随机推荐