我正在写一些JS,它调用一个API,该API返回一些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对象(即response_xml是)提供了getElement方法。但是,当我这样做时:

Object.getOwnPropertyNames(response_xml);


在返回的属性列表中找不到getElement。关于为什么的任何想法?

最佳答案

好。这将返回一个存在于内存中但不继承自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

10-07 14:51