【问题标题】:MooTools: Parsing Ajax responseTreeMooTools:解析 Ajax 响应树
【发布时间】:2011-03-31 02:46:18
【问题描述】:

我有一个对 XML 文档的 Ajax 请求。 XML 文档是一个 RSS 提要。这是我的onSuccess 请求:

onSuccess: function(responseTree) {
 // process <item> elements
}

如何枚举&lt;item&gt; 元素并检索各种子值?

【问题讨论】:

    标签: javascript xml rss mootools xmlhttprequest


    【解决方案1】:

    如果被调用文件的内容类型设置为text/xml,成功事件也会返回一个XML 对象。但是,请注意,如果您在另一台服务器上调用文件,这是不可能的——它不是跨域的。只能使用 Request-object 调用同域的文件。

    枚举item元素的示例代码;

    new Request({
        url: '/your-rss-parser.php',
        method: 'get',
        onSuccess: function(responseText, responseXML) {
            responseXML.getElements('item').each(function(item) {
                alert(item.getElement('title').get('text'));
            });
        }
    }).send();
    

    【讨论】:

    • 那么在 javascript 中检索和解析 RSS 提要的正确方法是什么,因为提要通常来自另一台服务器?
    【解决方案2】:

    我无法让 Björn 的解决方案在课堂上发挥作用。我有 XML

       <?xml version="1.0" encoding="utf-8"?> 
        <countries>
            <country>
                <name>Argentina</name>
                <id>1</id>
            </country>
            <country>
                <name>Australia</name>
                <id>2</id>
                <climate>Hot</climate>
            </country>
            <country >
                <name>France</name>
                <id>3</id>
            </country>
        </countries>
    

    和JS

        var requestXML = new Class({
    
        initialize: function(){
            var req = new Request({
                method: 'post',
                autoCancel: true,
                url: 'data.xml',
                onSuccess: function(text, xml){
                    xml.getElements('country').each(function(country) {
                        alert(item.getElement('country').get('text'));
                });
                }.bind(this)
            }).send();
        },
    
    });     
    
    window.addEvent('domready', function() {
    
        var request = new requestXML();
    
    });
    

    但脚本没有在 xml 对象上执行 getElement - Chrome 抱怨“未捕获的类型错误:对象 # 没有方法 'getElement'”。

    我确实让这个其他版本在 Chrome 中运行(阅读了神秘的 Slick 方法 in this post

        var requestXML = new Class({
    
        initialize: function(){
            var req = new Request({
                method: 'post',
                autoCancel: true,
                url: 'data.xml',
                onRequest: function(){
                    //
                }.bind(this),
                onSuccess: function(text, xml){
                    this.parseXML(xml);
                }.bind(this),
                onFailure: function(transport){
                    alert('XML loading error');
                }
            }).send();
        },
    
        parseXML: function(xml){
            var firstCountry = Slick.find(xml, 'country name');
            // Finds first matching element
            // Returns <name>Argentina</name>
            var countries = Slick.search(xml, 'country');
            // Finds all matching elements
            // Returns [<country>...</country>, <country>...</country>, ... ]
            var output = '';
            countries.each(function(item, index){
                var id = item.getElement('id').get('text');
                var name = item.getElement('name').get('text');
                var climate = item.getElement('climate');
                if (climate){
                    climate = climate.get('text');
                } else {
                    climate = '';
                }
                output += id + ' ' + name + ' ' + climate + '<br>';
            });
            $('container').set('html', output);
        }
    
    });     
    
    window.addEvent('domready', function() {
    
        var request = new requestXML();
    
    });
    

    但它在 IE 中中断,它在行 var id = item.getElement('id').get('text'); 上显示“对象不支持此属性或方法”。这看起来类似于 Björn 样式解决方案中 getElement() 的问题。

    有人可以给我们建议吗?与 JQuery 相比,Mootools 的文档似乎很差,而且我找不到太多关于如何解析 XML 的有用信息。

    干杯 最后

    【讨论】:

    • 检查您的 RSS 提要以确保有一个名为 ID 的元素。
    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多