我试图使用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");
}
答案 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;
};
答案 1 :(得分:0)
好像你正在请求RSS提要。 Feed始终将title
元素,description
元素和link
元素作为XML节点而不是(JSON)对象。
要获取xml元素,您需要使用XML解析器函数。目前,您将数据视为JSON。您尝试使用message
和description
检索data.message
或data.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>