2013-12-21 38 views
0

我想寫一個jQuery插件並通過一些XML讀取,但我似乎沒有得到任何返回值。如果我只是使用調試工具console.log,xml似乎會回來,但它似乎並沒有解析。我嘗試了不同的解析方法,但似乎沒有輸出。jQuery插件AJAX本地XML

JavaScript代碼

;(function ($) { 

    /** 
    * Plugin Definition 
    */ 
    $.fn.extend({ 

     feedr: function (option) { 

      var result; 
      var $this = this; 

      $.ajax({ 
       type: 'GET', 
       url: 'feedr.xml', 
       dataType: 'xml' 
      }) 
      .done(function (xml) { 
       var xmlDocument = $.parseXML(xml); 
       var $xml = $(xmlDocument); 
       var $type = $xml.find('type'); 

       return $this.html($type.text()); 
      }); 

     } 

    }); 

}(jQuery)); 

XML文件

<?xml version="1.0" encoding="UTF-8" ?> 
<feedr> 
    <feed> 
     <type>rdf</type> 
     <uri>ABC</uri> 
    </feed> 
    <feed> 
     <type>rdf</type> 
     <uri>ABC</uri> 
    </feed> 
    <feed> 
     <type>rss</type> 
     <uri>DEF</uri> 
    </feed> 
</feedr> 

HTML文件

<!DOCTYPE html> 
<html lang="en"> 

    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
     <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script> 
     <script type="text/javascript" src="feedr/js/jquery-feedr.js"></script> 
     <script type="text/javascript"> 
      $(function() { 
       $('.feedr').feedr(); 
      }); 
     </script> 
    </head> 

    <body> 
     <div id="feedr" class="feedr" data-xml="feedr"></div> 
    </body> 

</html> 
+0

你有一個小提琴/ plunker /等? –

回答

1

要修復更改()完成此:

.done(function (xml) { 
    var $xml = $(xml); 
    var $type = $xml.find('type'); 

    return $this.html($type.text()); 
}); 

原因是ajax調用指定返回的內容是XML,因此jQuery會對其進行預解析並將其作爲XML文檔而不是字符串來完成。

因此,您試圖將文檔轉換爲文檔,該操作失敗並返回null。

這裏有一個小提琴,可以幫助您 - 演示該問題http://jsfiddle.net/XjDfp/