extjs之-讀取xml

來源:互聯網
上載者:User
請求我們可以暫分為兩種:一種是表單Form的請求提交,一種是AJAX的請求。
我們現在對這兩種請求的返回結果進行讀取。
在後台用我們自訂的XML格式。
然後寫個JS對XML進行讀取。

1:對AJAX請求返回的xml讀取
var AjaxRead = {};  
AjaxRead = function (doc){
this.xmlData = doc;
var root = doc.documentElement || doc;
var q = Ext.DomQuery;
var sv = q.selectValue("success", root, true);
        success = sv !== false && sv !== 'false'&& sv!=='otherfalse';
    var ns = q.select("field", root);  
        for(var i = 0, len = ns.length; i < len; i++) {
       var n =  ns[i];
                var msg = q.selectValue("msg", n, 0);
          var type = q.selectValue('@type',n,0);
if(type == 'success'){
Ext.MessageBox.show({
title:'成功',
msg: msg,
       buttons: Ext.MessageBox.OK,
       icon: Ext.MessageBox.INFO
})
}
else if(type=='exception'){
Ext.MessageBox.show({
title:'錯誤',
msg: msg,
       buttons: Ext.MessageBox.OK,
       icon: Ext.MessageBox.ERROR
})
}
         }
}
2:對一般FORM請求返回的XML讀取:
Ext.form.CMXmlErrorReader = function(){

    //下面這段不理解,字面上是 傳入當前對象給父類的構造方法
    Ext.form.CMXmlErrorReader.superclass.constructor.call(this, {
            totalRecords:"total",
            record : 'field',
            success: '@success'
        }, [
            'id', 'msg'
        ]
    );
    this.totalRecords=0;
   
}
//整合自XMLReader複寫一下讀資料時候的操作
Ext.extend(Ext.form.CMXmlErrorReader, Ext.data.XmlReader,
{   
getTotalCount:function()
{
/*
var doc =  this.xmlData;

if(doc==null)
{
return 0;
}
var root = doc.documentElement || doc;
    var q = Ext.DomQuery;
    var totalRecords = 0;
    totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
    //Ext.MessageBox.alert(totalRecords); 
    return totalRecords;
*/
return this.totalRecords;
}
,
readRecords : function(doc){
      //this.meta指的是初始化xmlReader時的config配置項
        
   this.xmlData = doc;     
   var root = doc.documentElement || doc;
  var q = Ext.DomQuery;
  var recordType = this.recordType, fields = recordType.prototype.fields;
  var sid = this.meta.id;
  var totalRecords = 0, success = true;
  
   if(this.meta.totalRecords){
    totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
    this.totalRecords = totalRecords;
    }   
   if(this.meta.success){
      var sv = q.selectValue(this.meta.success, root, true);           
      success = sv !== false && sv !== 'false'&& sv!=='otherfalse';
    }
    var records = [];
    var ns = q.select(this.meta.record, root);
    for(var i = 0, len = ns.length; i < len; i++) {
        var n = ns[i];
        var values = {};
        var id = sid ? q.selectValue(sid, n) : undefined;
// add by gjw
   // var info =  Ext.MessageBox.INFO;
var type = q.selectValue('@type',n,0);
var msg = q.selectValue('msg',n,0);
if(type == 'success'){
/*
Ext.MessageBox.show({
title:'成功',
msg: msg,
       buttons: Ext.MessageBox.OK,
       icon: Ext.MessageBox.INFO
})
*/
//Ext.Msg.alert('成功',v);
}
else if(type=='exception'){
// deal with common exception
Ext.MessageBox.show({
title:'錯誤',
msg: msg,
       buttons: Ext.MessageBox.OK,
       icon: Ext.MessageBox.ERROR
})
}
else if(type=='session_error'){
//deal with session error
RS.showLogin({msg:msg});//顯示登入視窗頁面
//console.log("session error:"+msg);
}
// end by gjw
        for(var j = 0, jlen = fields.length; j < jlen; j++){
           var f = fields.items[j];
            var v = q.selectValue(f.mapping || f.name, n, f.defaultValue);
          v = f.convert(v, n);
       values[f.name] = v;
        }
        var record = new recordType(values, id);
        record.node = n;
        records[records.length] = record;
    }

    return {
        success : success,
        records : records,
        totalRecords : totalRecords || records.length
    };
    }
}
);
xml格式如:
<message success="true"><field type="success"><msg><![CDATA[刪除成功!]]></msg></field></message>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.