2009-12-04 90 views
0

我有一個XML文檔的Ajax請求。 XML文檔是一個RSS提要。這裏是我的onSuccess的要求:MooTools:解析Ajax響應樹

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

如何枚舉<item>元素和檢索各個子值?

回答

1

如果被調用文件的內容類型設置爲text/xml,success-event也會返回一個XML對象。但是,請注意,如果您在另一臺服務器上調用文件,則這是不可能的 - 這不是跨域的。您只能使用請求對象來調用同一個域上的文件。

通過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

那麼什麼是檢索和分析在javascript一個RSS feed以正確的方式,因爲飼料通常是從另一臺服務器? – noio 2011-03-29 09:35:51

0

我很難讓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 - 鉻抱怨 「遺漏的類型錯誤:對象#有沒有方法 'getElement'」。

我沒有得到這個其他版本的Chrome工作(看了這個神祕的油滑方法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()問題類似。

有人可以告訴我們嗎? Mootools的文檔與JQuery相比似乎很差,而且我無法找到關於如何解析XML的很多有用信息。

乾杯 最後

+0

檢查您的RSS源以確保有一個稱爲ID的元素。 – R0b0tn1k 2012-06-01 09:07:38