我从Ajax.Request
Ajax.Response.responseXML
收到了XML。我的XML实际上包含XHTML标记,我希望将其添加到我的文档中。
但是,我遇到了将responseXML
中的节点附加到当前文档中的问题。我怀疑这是因为它们是XML节点而不是DOM节点。
将responseXML
包裹在$()
中似乎也没有返回节点的扩展版本,并且文档没有说它会不会或不会。
Prototype是否提供了使用responseXML
的方法,如果没有,是否有跨浏览器方式来解析响应并使用它?
答案 0 :(得分:2)
虽然我接受了Christian的答案作为“正确”的答案,但是我的一位同事向我展示了用解析原型的XML响应的方式。
而是使用responseXML
,您只需使用Element
创建update()
,然后responseText
。然后,您可以使用select()
和类似的方法遍历节点。
答案 1 :(得分:1)
没有原型没有解析XML的本机方法。你也不能用$(xml)扩展xml,然后用.next(),。select()等来遍历DOM。
这是我最近在一个项目中做的一个例子,用于从拼写检查结果中手动解析一些XML。应该让你开始。
parseResults: function(results) {
var c = results.responseXML.getElementsByTagName('c');
var corrections = $A(c);
if(!corrections.size()){
this.link.insert({ after: '<span class="spellCheckNoErrors">No spelling errors</span>' });
(function(){ this.link.next().remove(); }.bind(this)).delay(1);
return null;
}
this.res = $A();
corrections.each(function(node){
sugg = node.childNodes[0].nodeValue;
offset = node.attributes[0].nodeValue;
len = node.attributes[1].nodeValue;
this.res.push(
$H({
word: this.text.substr(offset, len),
suggestions: sugg.split(/\s/)
})
);
},this);
this.overlay();
},