c#中的Ajax上手篇---非同步请求responseXML

上篇介绍了如何在Ajax客户端与服务器端之间传送简单的文本数据,其实,也可以使用XML作为数据传送、沟通的格式,Ajax客户端若要发送XML,基本上就是将XML作为字符串,在POST请求时发送,例如:

*HelloAjax.js

var xmlHttp; function createXMLHttpRequest() { if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } function prepareXML() { var xml = ""; var options = document.getElementById("skills").childNodes; for (var i = 0; i < options.length; i++) { var option = options[i]; if (option.selected) { xml = xml + "" + option.value + ""; } } xml = xml + ""; return xml; } function handleSkills() { var xml = prepareXML(); var url = "Handler1.ashx?timeStamp=" + new Date().getTime(); createXMLHttpRequest(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("POST", url); xmlHttp.setRequestHeader("Content-Type", "text/xml"); xmlHttp.send(xml); }

 

在上例中,将客户端在多选择下拉框中选择的数据,以下列的XML格式发送:

java vb csharp

 

服务器端采用HttpHandler实现,在服务器端接收到XML之后,针对XML加以剖析,取得每个NODE数据。

并会以另一个XML文件重新发回客户端。

*Hanler1.ashx

using System.Text; using System.Web; using System.Xml; using System.Globalization; namespace HelloAjax { public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpRequest Request = context.Request; HttpResponse Response = context.Response; if (Request.InputStream.Length != 0) { XmlDocument xmlDoc = new XmlDocument(); XmlTextReader xmlTextReader = new XmlTextReader(Request.InputStream); xmlDoc.Load(xmlTextReader); XmlNodeList nodes = xmlDoc.GetElementsByTagName("skill"); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendFormat(CultureInfo.InvariantCulture, ""); foreach (XmlNode node in nodes) { string skill = node.FirstChild.InnerText; stringBuilder.AppendFormat(CultureInfo.InvariantCulture, ""); stringBuilder.AppendFormat(CultureInfo.InvariantCulture, skill); stringBuilder.AppendFormat(CultureInfo.InvariantCulture, ""); } string returnString = stringBuilder.ToString() + ""; Response.Charset = "utf-8"; Response.ContentType = "text/xml"; Response.Write(returnString); } } public bool IsReusable { get { return true; } } } }

这个HttpHandler只是简单的示范如何解析XML,并重新使用以下的XML格式,将选择的资料发送回客户端:

java vb csharp

在客户端如果要对返回的XML文件也进行解析,则可以使用XMLHttpRequest的responseXM属性,来取得代表XML文件的DOM对象,之后就可以利用DOM的各种操作方法来解析文件内容,例如:

function handleStateChange() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { var xmlDoc = xmlHttp.responseXML; // 取得DOM var responses = xmlDoc.getElementsByTagName("response"); var out = "Responses: "; for (var i = 0; i < responses.length; i++) { var response = responses[i]; out = out + "
" + response.childNodes[0].nodeValue + ""; } document.getElementById("response").innerHTML = out; } } }

另外,此时只需要一个ASPX页面来组成一个完整的客户端/服务端程序:

*HelloAjax.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="HelloAjax._Default" %> Hello,Ajax!

如果执行这个程序,客户端所选择的数据会以XML格式发送,服务端加以解析,并以另一个XML送回,客户端再解析XML并显示节点中的数据,这是一个基本的XML传送与接收的例子。

 

你可能感兴趣的:(.NET)