這是本文件的舊版!


XML Parser

在使用Ext.Ajax請求後,免不了需要去處理回應的內容:

Ext.Ajax.request({
  url: 'requestURL.action',
  params: {
    key: aKey
  },
  success: function(response){
    var xml = response.responseXML;
    // Handler the response
  },
  failure : function(response, options){ 
    Ext.example.msg('Warning', 'Connect to server failed: ' + response.status);
  }
});

我期望會取得的結果為:

<result>
  <status>success</status>
  <msg></msg>
</result>

一般正規的原始做法如下: Download Sample

var text = "<result><status>success</status><msg>test msg</msg></result>";
 
var xmlDoc = null;
if( window.DOMParser ){
	var parser = new DOMParser();
	xmlDoc = parser.parseFromString(text,"text/xml");
} else {
	xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async=false;
    xmlDoc.loadXML(text); 
}
 
var statusNode = xmlDoc.getElementsByTagName ("status")[0];
var msgNode = xmlDoc.getElementsByTagName ("msg")[0];
var status = statusNode.textContent == null ? statusNode.text : statusNode.textContent;
var msg = msgNode.textContent == null ? msgNode.text : msgNode.textContent;
雖然說在ExtJS中取得的response.responseXML已經是DOM Document物件,但要去retrieve DOM Element還是必須根據不同瀏覽器要有不同做法。可以參考這個連結中對DOM Document各屬性與方法的瀏覽器支援表。重點是在ExtJS中,有什麼較一致的做法呢?