我正在编写一些调用API的JS,它返回一些XML。我使用的是Mootools 1.3(兼容性)和Mootools-More 1.4。 没有使用其他JS框架。我的代码如下所示:
var req = new Request({url:'whatevs.com/api', method:'get'}).addEvent('success',
function(response_text, response_xml) {
alert(response_xml.getElement('response').getProperty('status'));
}).send();
实际的API调用成功,response_text如下所示:
<?xml version="1.0" ?>
<response status="success" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://whatevs.com/api/api.xsd">
<resultset total="0" start_index="0" results_limit="20" query="keyword=cats">
<items/>
</resultset>
</response>
但是,当代码运行并在"Uncaught TypeError: Object #<Document> has no method 'getElement'"
调用时死亡时,我收到getElement
JS错误。根据我的理解,Mootools为所有Document对象提供了一个getElement方法,response_xml就是这样。但是,当我这样做时:
Object.getOwnPropertyNames(response_xml);
在返回的属性列表中找不到 getElement
。关于为什么会这样的想法?
答案 0 :(得分:3)
好。这将返回一个存在于内存中但不从Element原型继承的nodeList。您可以遍历节点列表并通过从Array.prototype调用来使用.filter等,但DOM更擅长查找元素,因此您最好使用代理元素。见http://jsfiddle.net/cjXMN/
new Request.HTML({
url: '/echo/html/',
data: {
html: document.getElement('textarea').get('value')
},
onComplete: function(){
console.log(this.response.elements);
// or set the html to this.response.text etc.
var proxy = new Element('div').adopt(this.response.elements);
console.log(proxy.getElement('response').get('status'));
}
}).send();
它很可能适用于html5 /非严格的doctype。注意我正在使用Request.HTML