2011-04-12 63 views
3

處理XML數據我在javascript XML數據處理的新手。目前,我的Ajax調用服務器,服務器返回XML數據,我不知道如何解析XML數據得到一些價值。如何在JavaScript

我的Ajax調用:

$.ajax({ 
      url: 'http://localhost:8080/someinterface/the-id', 
      type: 'GET', 
      async: false, 
      dataType: 'application/xml', 
      data: {id: 43}, 
      success: function(data) { 

       //handle the data 

      }, 
      error: function(xhr, status, error){ 
       alert('error happens'); 
      } 
     }) 

返回XML數據是這樣的:

<DOCUMENT> 
    <AGE>16</AGE> 
    <USERNAME>default user</USERNAME> 
    <SECURITYID>1111</SECURITYID> 
... 

如何解析XML數據獲得例如 「USERNAME」 在我的javascript?

------------ ------------編輯

我試圖用你提出的辦法,但現在我得到錯誤信息:

XML解析錯誤:沒有的元素中找到位置:MOZ-nullprincipal:{120e8c1d-5174-4e94-9ebb-2bffda80b170} 1號線,1列: ^

和Ajax調用結果的錯誤功能

------------------- 部分解決 ------------------------

最後,我發現原因是我的應用程序碼頭服務器上運行在localhost:,而我的AJAX請求這是對本地主機上運行Tomcat服務器上的XML數據:。由於域端口不同,我得到了這個問題。現在,當我將我的應用程序的Tomcat服務器並請求Tomcat服務器,我得到XML響應成功。

AJAX調用去獲得成功的功能,我用

success: function(data){ 
      xmlDoc = $.parseXML(data); 
      $xml = $(xmlDoc); 
      $userName = $xml.find('USERNAME'); 
      var userName = $userName.text(); 
      alert('1'); 
      alert(userName); 
} 

我得到警報(「1」)在我的瀏覽器,我沒有得到警報(用戶名),我不知道爲什麼......所以我把這裏的「部分解決」,所以...爲什麼我沒有得到我的用戶名警報..

+0

@Mallon:你使用了哪一個。什麼是我使用的jQuery版本? – Amitabh 2011-04-12 14:10:08

+0

嗨,我已經嘗試了所有建議的方法,也嘗試過直接警告數據,例如成功函數中的「alert(data)」,但是當它在瀏覽器中運行時,它會調用錯誤函數並彈出錯誤函數中的警報。 – Mellon 2011-04-12 14:13:57

+0

@Mallon:你確定你的服務器沒有返回空的xml嗎? – Amitabh 2011-04-12 14:17:20

回答

3

您可以使用jQuery的XML解析。

http://api.jquery.com/jQuery.parseXML/

因此,在您成功的功能。

success: function(data) { 
    //xmlDoc = $.parseXML(data); 
    $xml = $(data); 
    $userName = $xml.find('USERNAME'); 
    var uName = $userName.text(); 
} 
0

使用JSON數據類型來代替,它的設計與JavaScript中使用。

例子:

$.ajax({ 
url: url, 
dataType: 'json', 
data: data, 
success: callback 
}); 
+2

由於這個項目需要xml數據響應,所以我現在不能使用json。 – Mellon 2011-04-12 13:55:54

+0

好的,對不起。沒想到這一點。 – 2011-04-12 13:56:52

1

瀏覽器基本上都會爲您處理:

success: function(data) { 
    var username = $(data).find('username').text(); 
    // ... 
} 
0

在函數中使用以下代碼片段將XML結果字符串放入一個包裝的jQuery集合中。

var xmlString = data; 

//IE XML parser needs to use an ActiveXObject 
if ($.browser.msie) { 
    unwrappedXml = new ActiveXObject("Microsoft.XMLDOM"); 
    unwrappedXml.async = false; 
    unwrappedXml.loadXML(xmlString); 
    } 
else { 
    unwrappedXml = xmlString; 
} 

var xml = $(unwrappedXml); 
xml.find(selector); 
1

您錯用了dataType參數。它不應該是一個MIME類型。相反,它應該是其中的一個:「xml」,「html」,「script」,「json」,「jsonp」或「text」。在你的情況, 「XML」(或者完全忽略它和jQuery會猜你):

更新:

到目前爲止,它看起來,你的問題是,你的服務器端腳本崩潰,你甚至沒有有效的XML。無論如何,我已經舉了一個小例子,以幫助它:

$.ajax({ 
    url: "/test.xml", 
    type: "GET", 
    async: false, 
    dataType: "xml", 
    data: {id: 43}, 
    success: function(data) { 
     var output = "Usernames:\n"; 
     $(data).find("USERNAME").each(function(){ 
      output += "\n- " + $(this).text(); 
     }); 
     alert(output); 
    }, 
    error: function(xhr, status, error){ 
     alert("error happens"); 
    } 
}) 
+0

對不起,我沒有明白你的意思,你是什麼意思關於「濫用」數據類型。我檢查了你的鏈接,發現文本「特別是,XML必須由服務器聲明爲text/xml或application/xml以獲得一致的結果。」如果你檢查我的帖子,我確實使用dataType:'application/xml'。但是,無論如何謝謝:) – Mellon 2011-04-12 14:28:11

+0

嗨,我試過忽略它,瀏覽器確實爲我猜了,但這並沒有解決我的問題,問題仍然存在。謝謝。 – Mellon 2011-04-12 14:33:28

+0

@Mellon:請仔細閱讀我的回答。我說你可以**不使用'dataType:「application/xml」'並且你回覆你**正在使用它。 – 2011-04-12 14:48:52