使用XML - 消息未定义

时间:2015-01-23 16:21:43

标签: javascript jquery ajax xml

我试图使用XML Web Service,但我得到的结果.Message在成功函数中未定义。这段代码怎么了?错误是:

Uncaught TypeError: Cannot read property 'Message' of undefined

这是我的代码:

function RequestService() {
    $.ajax({
        type: "GET",
        url: "http://www.brazilmachinery.com/Arquivos/RSS/pt-BR/12.xml",
        data: "",
        dataType: "xml",
        success: function(data) { SucessCallback(data.d); },
        error: function(data) { FailureCallBack(data); }
    });
}

function SucessCallback(result) {
    $('p').html('Resultado: ' + result.Message + ' <br /> Descrição: ' + result.Description);
}

function FailureCallBack(result) {
    alert("erro");
}

2 个答案:

答案 0 :(得分:0)

您的回复是一个XML文件。您假设它返回JSON对象并尝试访问属性。

您必须解析XML文件并提取要检索的节点。下面是XML到JSON实用程序的功能。您可以使用它来访问该属性。

function xmlToJson(xml) {   
    // Create the return object
    var obj = {};

if (xml.nodeType == 1) { // element
    // do attributes
    if (xml.attributes.length > 0) {
    obj["@attributes"] = {};
        for (var j = 0; j < xml.attributes.length; j++) {
            var attribute = xml.attributes.item(j);
            obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
        }
    }
} else if (xml.nodeType == 3) { // text
    obj = xml.nodeValue;
}

// do children
if (xml.hasChildNodes()) {
    for(var i = 0; i < xml.childNodes.length; i++) {
        var item = xml.childNodes.item(i);
        var nodeName = item.nodeName;
        if (typeof(obj[nodeName]) == "undefined") {
            obj[nodeName] = xmlToJson(item);
        } else {
            if (typeof(obj[nodeName].push) == "undefined") {
                var old = obj[nodeName];
                obj[nodeName] = [];
                obj[nodeName].push(old);
            }
            obj[nodeName].push(xmlToJson(item));
        }
    }
    }
    return obj;
};

来源:http://davidwalsh.name/convert-xml-json

答案 1 :(得分:0)

好像你正在请求RSS提要。 Feed始终将title元素,description元素和link元素作为XML节点而不是(JSON)对象。

要获取xml元素,您需要使用XML解析器函数。目前,您将数据视为JSON。您尝试使用messagedescription检索data.messagedata.description,就像它是属性一样。实际上,这些是xml节点。

要从节点获取Feed的内容,您可以在 jQuery 中遍历 xml ,其方式与遍历 dom节点的方式基本相同。在下面的函数中,我使用$xml = $( result )将返回的xml文件中的数据转换为jQuery对象。

在jQuery中

function RequestService() {
    $.ajax({
        type: "GET",
        url: "http://www.brazilmachinery.com/Arquivos/RSS/pt-BR/12.xml",
        data: "",
        dataType: "xml",
        error: function(data) { FailureCallBack(data); }
    }).done(function(data) { SucessCallback(data);});
}

function SucessCallback(result) {
    $xml = $( result );
    $title = $xml.find( "item" ).each(function(){
        $('p').append('Resultado: ' + $(this).find("title").text() + ' <br /> Descrição: ' + $(this).find("description").text());
    });


}

我还用更新的功能替换了success属性。它现在可以查找RSS提要中的所有项目并对其进行迭代。将数据附加到p - 元素。

RSS-xml文档具有以下基本结构

<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <title>
            Title
        </title>
        <link>
            http://www.example.com
        </link>
        <item>
            <title>Item title</title>
            <link>www.example.com/item</link>
            <description>
                item description here.
            </description>
        </item>
    </channel>
</rss>