請求我們可以暫分為兩種:一種是表單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>