MooTools: анализ Ajax responseTree - PullRequest
0 голосов
/ 04 декабря 2009

У меня есть запрос Ajax к документу XML. Документ XML представляет собой канал RSS. Вот мой onSuccess по запросу:

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

Как мне перечислить <item> элементы и извлечь различные дочерние значения?

Ответы [ 2 ]

1 голос
/ 14 декабря 2009

Событие success также возвращает XML-объект, если для типа содержимого вызываемого файла установлено значение text/xml. Однако помните, что это невозможно, если вы вызываете файл на другом сервере - это не междоменный домен. Вы можете использовать объект Request только для вызова файлов в одном домене.

Пример кода, который перечисляет элементы 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();
0 голосов
/ 30 марта 2011

У меня проблемы с получением решения Бьёрна для работы в классе. У меня есть 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();

});

Но скрипт не выполняет getElement для объекта xml - Chrome жалуется на «Uncaught TypeError: Object # не имеет метода« getElement »».

Я получил эту другую версию, работающую в Chrome (прочитав о таинственных методах Slick в этом посте )

    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');. Это похоже на проблему с getElement () в стилевом решении Бьёрна.

Кто-нибудь может нам посоветовать? Документация для Mootools кажется плохой по сравнению с JQuery, и я не могу найти много полезной информации о том, как анализировать XML.

Приветствие И наконец

...