用过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
1
function 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
1
function 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
}