Javascript 解析xml之后,结果是未定义

Javascript 解析xml之后,结果是未定义,javascript,jquery,xml,ajax,Javascript,Jquery,Xml,Ajax,可能重复: 我正在解析xml,我想要的是在解析后返回xml。问题是在我的getResult()函数中result的值为undefined。我为什么以及如何使它工作 这是我的密码 var result = ''; var Xml = { to : null, from : null, url : null, init: function (fromaddress, toaddress, link) { from = fromaddress; t

可能重复:

我正在解析xml,我想要的是在解析后返回xml。问题是在我的
getResult()
函数中
result
的值为
undefined
。我为什么以及如何使它工作

这是我的密码

var result  = '';

var Xml = {
to      : null,
from    : null,
url     : null,

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);
},

getResult: function () {
    console.log('Result: ' + Xml.result); //<--- Here result has undefined value
    return result;
}
};
var结果=”;
变量Xml={
至:空,
from:null,
url:null,
init:函数(fromaddress、toaddress、link){
from=fromaddress;
to=to地址;
url=链接;
这个.requestXml();
归还这个;
},
requestXml:函数(){
$.ajax({
键入:“获取”,
url:url,
数据类型:“xml”,
成功:this.parseXml
});
},
parseXml:函数(xml){
log('xml:'+$(xml));
结果=$(xml);
},
getResult:函数(){

console.log('Result:'+Xml.Result);//Xml.Result从未被设置。可能我遗漏了什么,但您需要在parseXml中执行此操作,以便设置其结果字段:

this.result = $(xml);
在getResult中,您的console.log调用不应显示未定义。您甚至可以让它返回
this.result


另一件事,在初始值设定项中,应该使用“this”关键字设置每个属性。

以下是我解决问题的方法

var Xml = function () {
var to, from, url, result,

    init = function (fromaddress, toaddress, link, callback) {
        from    = fromaddress;
        to      = toaddress;
        url     = link;

        requestXml(callback);
    },

    requestXml = function (callback) {
        $.ajax({
            type: "GET",
            url: url,
            dataType: "xml",
            success: callback
        });
    },

    getResult = function () {
        return result;
    };

 return {
    init        : init,
    getResult   : getResult
 };
};

parseXml
中,如果执行
console.lo($(xml))
您是否有值,或者它是否已经在那里
未定义?您是否已经问过这个问题?请也发布响应XML!@FrançoisWahl我在那里有值。@RoryMcCrossan它不是重复的。前面的问题解决了我的一个问题,但这是不同的。您没有在任何地方使用“this”来设置XML对象的域ds.您没有在初始值设定项中使用“this”,也没有在url字段的requestXml函数中使用“this”。Xml本身不包含闭包,因为它不是函数。定义其字段(到、从、url等)不会在其作用域中被视为变量。您需要使用“this”关键字设置它们。例如,在初始值设定项中设置“this.url=link;”,在$.ajax url字段中设置“this.url”。在您提到的任何地方添加此项后,仍然会得到相同的结果。@Vinay:我又使用了一些此项,您的建议应该可以很好地发挥作用。我还添加了在我的帖子中有一个小演示,用来测试代码本身,作为概念证明,它传递了一个简单的字符串,而不是
$(xml)
,并且它按照预期工作。我认为问题更多地与将xml数据封装到
$()
.I+1在您解决了代码构建中的问题后,请给出您的答案。主要问题似乎是
parseXml
中发生了什么。完整性演示: