解析Ajax响应结果的两种简单方法.

用过Ajax方面技术的都知道,部分的框架都会要求在客户端有个响应的function或者客户端的回调,这个方法在整个异步操作中就是用来解析服务器的响应.通常服务器给客户端的response以字符串格式传递,比如json或xml,而比较灵活的xml是最常见的.这也是因为在服务器端将结果转换成xml比较方便.那么解析这些xml成我们自己要的界面元素,就是必不可少.而这中解析,常见的就是用DOM对象,通过xpath,然后加个循环,最后拼凑出一个table或者select.这个过程是比较麻烦.像Ajax.net框架就做得比较智能,能像服务器那样调用对象,但是要形成一个table表格还是要一个个获取,应为客户端没有像dDatagrid那样可以方便的绑定数据源.这里介绍2种解析的方法,基本上就是自动展现.也许有人已经猜到,还是看看代码吧.

1.用服务器控件的RenderControl方法输出html,服务器控件最终在生成的还是html代码,利用这个把datagrid转换成table那就很简单了.而RenderControl方法就是把控件转成html的字符串.
RenderControl
 1[AjaxMethod()]
 2        public string GetSuppliers()
 3        {
 4            using (SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True"))
 5            {
 6                SqlCommand command = new SqlCommand("select * from suppliers1", con);
 7                SqlDataAdapter adapter = new SqlDataAdapter(command);
 8                DataSet ds = new DataSet();
 9                adapter.Fill(ds);
10
11                DataGrid gd = new DataGrid();
12                gd.DataSource = ds.Tables[0];
13                gd.DataBind();
14
15                // 利用控件的RenderControl方法输出html
16                StringWriter sw = new StringWriter();
17                HtmlTextWriter hw = new HtmlTextWriter(sw);
18                gd.RenderControl(hw);
19
20                return sw.ToString();
21            }

22        }
获取相应大的结果只需要一句话 document.getElementById("divResult").innerHTML = response.value;

2.用 xslt解析xml,这种方法还有点技术含量,具体原理大伙都会,主要看看在js种如何去转换xml.
IE中
IEXSLT
 1function TransXml(xmlSource, xsltSource)
 2    {
 3        try
 4        
 5            var doc = new ActiveXObject("MSXML2.DOMDocument.3.0");
 6            var docXslt = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.3.0"); 
 7            doc.async = false
                //xmlSource 是传进来的xml字符串
 8            doc.loadXML(xmlSource); 
 9           
10            docXslt.async = false;
11            docXslt.load(xsltSource);
12
13            var oTemplate = new ActiveXObject("MSXML2.XSLTemplate");
14            oTemplate.stylesheet = docXslt;
15            
16            var oProcessor = oTemplate.createProcessor();
17            oProcessor.input = doc;
18           
19            oProcessor.addParameter("currentTime"new Date().toLocaleString());
20            oProcessor.transform();
21            sResult = oProcessor.output;  
22            // 这里是保存解析的结果 divResult1是个div
23            divResult1.innerHTML = sResult; 
24        }

25        catch (e)
26        {
27            alert(e.message);
28        }
 
29         
30    }

Firefox

FFXSLT
 1function TransXml(xmlSource, xsltSource)
 2    {
 3        try
 4        
 5            var docXslt = document.implementation.createDocument(""""null);
 6            
 7            var oParser = new DOMParser();
 8            doc = oParser.parseFromString(xmlSource, "text/xml"); 
 9            doc.async = false;  
10           
11            docXslt.async = false;
12            docXslt.load(xsltSource);
13
14            var oProcessor = new XSLTProcessor();            
15            oProcessor.importStylesheet(docXslt);
16            
17            oProcessor.setParameter(null"currentTime"new Date().toLocaleString()); 
18            sResult = oProcessor.transformToDocument(doc);
19                
20            var sXml = new XMLSerializer().serializeToString(sResult, "text/xml"); 
21            document.getElementById("divResult").innerHTML = sXml;
22        }

23        catch (e)
24        {
25            alert(e.message);
26        }
 
27         
28    }

 

转载于:https://www.cnblogs.com/shenba/archive/2007/12/01/979195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值