本文详细演示如何使用jQuery的Ajax方法解析XML数据。通过配置dataType为xml,分别展示了同步与异步请求的处理方式,并提供了C# Ashx后端生成XML响应的完整代码。内容涵盖success回调中遍历节点、提取属性及文本值的多种JQuery写法,适用于需要前后端交互处理结构化数据的场景。
jQuery Ajax解析XML配置与调用
代码如下:
$.ajax({
async: true, // 默认值为true,表示异步请求
cache: true, // 默认值为true,若设置为false,则不会从浏览器缓存中加载请求信息
type: "POST", // 默认请求方式为GET,可选方式包括POST或GET
dataType: "xml", // 默认返回数据类型包括"xml"或"html",其他可选值包括"script"、"json"、"jsonp"
url: "Test.ashx", // 默认发送地址为当前页面地址,此处指定请求目标地址
data: { key: "value" }, // 指定发送至服务器的数据内容
error: function(xml) { alert('Error loading XML document' + xml); }, // 请求失败时的回调函数
timeout: 1000, // 设置请求超时时间为1000毫秒
success: function(xml) { // 请求成功后的回调函数,参数为服务器返回的数据及数据格式
$("#users").empty();
// 使用Jquery处理xml数据
$(xml).find('Table').each(function() {
var loginname = $(this).find("Loginname").text();
var Name = $(this).find("Name").text();
$("#users").append("<li>" + loginname + " - " + name + "</li>");
});
/*
$(xml).find('user').each(function(i) {
var loginname = $(xml).find("user loginname").eq(i).text();
var name = $(xml).find("user name").eq(i).text();
$("#users").append("<p>" + loginname + "</p>" + "<p>" + name + "</p><Br />");
})
$(xml).find("student").each(function(i){
var id = $(this).find("id"); // 获取对象
var id_value=$(this).children("id").text(); // 获取文本内容
alert(id_value);//此处输出ID的值
alert($(this).attr("email")); // 此处可显示student节点下的email属性
// 以下为最后输出部分,参考cssrain的写法,风格更贴近JQuery
$('<li></li>').html(id_value).appendTo('ol');
});
*/
}
})C# Ashx后端生成XML数据示例
使用ashx文件返回XML数据:
代码如下:
<%@ WebHandler Language="C#" %>
using System;
using System.Web;
using System.Text;
using System.Data;
public class Test : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.StatusCode = 200;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
DataSet ds = new DataSet("AccountList");
ds = GetList("Account","AccountId","Loginname,Name",50,1,false, false,"1=1");
context.Response.ContentType = "text/xml";
context.Response.Charset = "GB2312";
context.Response.Clear();
context.Response.Write("<?xml version=\"1.0\" encoding=\"gbk\"?>\n " + ds.GetXml());
/*
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"gbk\"?>");
sb.Append("<AccountList>");
sb.Append("<Account><loginname>Loro5</loginname><name>wulu</name></user>");
sb.Append("</Account>");
context.Response.Write(sb.ToString());
*/
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
}