Ext2.0 与服务端XML的交互(扩展Ext.data.XmlReader )
【IT168技术文档】
本文案例如下:后台使用C#写的webservice,返回一个xml串作为结果集。前端需要对xml结果解析,放入到一个表格中。
以前没用Ext的解决办法是 :前台写xsl 转换xml ,把结果放入某个div内。。。优点是灵活多样,缺点是需要手写xsl代码,并对开发人员的dom以及css技术有比较高的要求。
现在有了漂亮贼酷的Ext ,没有理由不选它。 于是用Ext.data.XmlReader 读取服务器传回来的xml,本以为跟读取xml文件一样,读取url就ok了。但是代码一写。问题出现了。
我的代码如下:
alert出来的dataStore.getCount始终是0 。也就是 没有读出来webservice返回的xml串。1 2 Ext.onReady(function(){ 3 var cm = new Ext.grid.ColumnModel([ 4 {header:'编号',dataIndex:'id'}, 5 {header:'性别',dataIndex:'sex'}, 6 {header:'姓名',dataIndex:'name'}, 7 {header:'描述',dataIndex:'descn'} 8 ]); 9 cm.defaultSortable = true; 10 11 var CARTOON_WSDL_ADDR = "http://localhost/JMAMCCTV/JUUMSystemService/UUMSystemService.asmx"; 12 13 var dataStore = new Ext.data.Store({ 14 url: CARTOON_WSDL_ADDR+'/testXmlpage', 15 reader: new Ext.data.XmlReader({ 16 totalRecords: "results", 17 record: "item" 18 }, [ 19 { name: "id" },{ name: "sex" },{ name: "name" },{ name: "descn" } 20 ]) 21 }); 22 23 24 25 var grid = new Ext.grid.GridPanel({ 26 renderTo: 'testLayout', 27 ds: dataStore, 28 cm: cm, 29 height:200, 30 width:500, 31 title: 'PagerCkp' 32 }); 33 34 dataStore.load({ 35 params: { 36 pageindex:1,pageCount:2 37 }, 38 callback: function(r, options, success) { 39 //alert(dataStore.getTotalCount() ); //取得记录总数。即 results 节点中的值 40 //alert(dataStore.getCount() ); //取得记录数。即 返回的xml中真实的记录数 41 if (success && r.length > 0) { 42 var ss = r[0].get("id"); 43 //alert(ss); 44 } 45 else{ 46 } 47 } 48 }) 49 });
仔细查找问题所在。查看了Ext.data.XmlReader类 的源码,看到原来Ext.data.XmlReader 直接使用了 responseXML:
而大家知道webservice返回的responseXML 肯定是一个Xml对象。你的xml串就是被转义并放在 responseXML的根节点的text里的。比如本例:responseXML1 var doc = response.responseXML; 2 if(!doc) { 3 throw {message: "XmlReader.read: XML Document not available"}; 4 } 5 return this.readRecords(doc);
对象的 xml 如下:
<?xml version=\"1.0\"?> <string xmlns=\"http://www.mycompany.com/webservices/\"><dataset> <results>10</results><item><id>1</id><sex>男</sex><name>JasonWoo</name> <descn>US.Ny</descn></item><item><id>2</id><sex>女</sex><name>Lucy</name><descn>CN.BJ</descn> </item></dataset></string>
0
相关文章