jQuery.ajax(),返回XML后操作问题
时间:2011-05-01
来源:互联网
1.异步请求是这样的:
JScript code
2.服务端是Generic Handle(一般处理程序 ExampleHandler.ashx)
C# code
3.函数 LoadOrder 如下
C# code
对该段代码进行调试,光标到达“context.Response.End();”时,输出值xmlTmpt.OuterXml 是我期望的:
XML code
4.客户端回调函数:
JScript code
打印出来的值却是:
XML code
即得到的仅仅是文本值,而那些XML标签全都不见了,谁帮我看看是怎么回事?
JScript code
jQuery.ajax({ type: "get", dataType: "xml", contentType: "application/x-www-form-urlencoded; charset=UTF-8", url: "Handle/ExampleHandler.ashx", data: 'id=0&date='+new Date(), complete: function() { }, success: function(dataXML) { //将返回值呈现以查看 $(dataXML).find("Report").each(function(){ $("#msg").html($(this).text()); }); } //end Success }); //end Ajax
2.服务端是Generic Handle(一般处理程序 ExampleHandler.ashx)
C# code
context.Response.ContentType = "text/plain"; context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); context.Response.AddHeader("pragma", "no-cache"); context.Response.AddHeader("cache-control", ""); context.Response.CacheControl = "no-cache"; context.Response.Charset = Encoding.UTF8.ToString(); if (context.Request.Params["id"] != null) { string id = context.Request.Params["id"].ToString(); LoadOrder(context); }
3.函数 LoadOrder 如下
C# code
private void LoadOrder(HttpContext context) { string myConnString = "Provider=Microsoft.Jet.OLEDB.4.0;data source ="; OleDbConnection myConn = new OleDbConnection(myConnString + context.Server.MapPath("~/App_Data/CellOrder.mdb")); myConn.Open(); string sql = "Select * From Client"; OleDbCommand myComm = new OleDbCommand(sql, myConn); OleDbDataReader myReader; //1.数据流 myReader = myComm.ExecuteReader(); // 生成xml文件对象 XmlDocument xmlTmpt = new XmlDocument(); xmlTmpt.Load(context.Server.MapPath("~/CellsTemplate/CellOrder.xml")); XmlNode clientNodes = xmlTmpt.DocumentElement.ChildNodes[1]; while(myReader.Read()) { if (clientNodes.ChildNodes.Count > 0) { for (int i = 0; i < clientNodes.ChildNodes.Count; i++) { XmlNode dataNode = clientNodes.ChildNodes[i]; string columnName = dataNode.Attributes["columnName"].Value; dataNode.InnerText = myReader[columnName].ToString(); } } } context.Response.ContentType = "text/xml"; context.Response.Write(xmlTmpt.OuterXml); context.Response.End(); myReader.Close(); myConn.Close(); }
对该段代码进行调试,光标到达“context.Response.End();”时,输出值xmlTmpt.OuterXml 是我期望的:
XML code
<?xml version="1.0"?> <Report> <CllFileName>CellOrder.cll</CllFileName> <Client> <Data col="3" row="16" columnName="单位名称">南京****股份有限公司</Data> <Data col="3" row="17" columnName="单位地址">江苏市********</Data> <Data col="9" row="17" columnName="邮编">210000</Data> <Data col="3" row="18" columnName="订购人姓名">李**</Data> <Data col="5" row="18" columnName="订购人电话">0791-1234567</Data> <Data col="7" row="18" columnName="订购人传真">0791-1234567</Data> <Data col="9" row="18" columnName="订购人E-Mail">*****@sina.com</Data> <Data col="3" row="19" columnName="开发人员姓名">周*</Data> <Data col="5" row="19" columnName="开发人员电话">0791-7654321</Data> <Data col="7" row="19" columnName="开发人员传真">0791-7654321</Data> <Data col="9" row="19" columnName="开发人员E-Mail">####@china.com</Data> <Data col="3" row="20" columnName="开票信息">网上支付</Data> <total>100</total> </Client> </Report>
4.客户端回调函数:
JScript code
success: function(dataXML) { $(dataXML).find("Report").each(function(){ $("#msg").html($(this).text()); }); } //end Success
打印出来的值却是:
XML code
CellOrder.cll南京****股份有限公司江苏市********330000李**0791-12345670791-1234567*****@sina.com周*0791-76543210791-7654321####@china.com网上支付
即得到的仅仅是文本值,而那些XML标签全都不见了,谁帮我看看是怎么回事?
作者: lxhefeiyancao 发布时间: 2011-05-01
粗略总结一下:
调试时,光标在.ashx(服务端)走到 context.Response.End()处,查看xmlTmpt.OuterXml 得到如下值:
【此值正是我想在客户端期望得到的】
XML code
但到了 客户端回调函数 中,就变成了只含值,却不含XML标签的样子:
XML code
居然还有这种问题,郁闷伤了
调试时,光标在.ashx(服务端)走到 context.Response.End()处,查看xmlTmpt.OuterXml 得到如下值:
【此值正是我想在客户端期望得到的】
XML code
<?xml version="1.0"?> <Report> <CllFileName>CellOrder.cll</CllFileName> <Client> <Data col="3" row="16" columnName="单位名称">南京****股份有限公司</Data> <Data col="3" row="17" columnName="单位地址">江苏市********</Data> <Data col="9" row="17" columnName="邮编">210000</Data> <Data col="3" row="18" columnName="订购人姓名">李**</Data> <Data col="5" row="18" columnName="订购人电话">0791-1234567</Data> <Data col="7" row="18" columnName="订购人传真">0791-1234567</Data> <Data col="9" row="18" columnName="订购人E-Mail">*****@sina.com</Data> <Data col="3" row="19" columnName="开发人员姓名">周*</Data> <Data col="5" row="19" columnName="开发人员电话">0791-7654321</Data> <Data col="7" row="19" columnName="开发人员传真">0791-7654321</Data> <Data col="9" row="19" columnName="开发人员E-Mail">####@china.com</Data> <Data col="3" row="20" columnName="开票信息">网上支付</Data> <total>100</total> </Client> </Report>
但到了 客户端回调函数 中,就变成了只含值,却不含XML标签的样子:
XML code
CellOrder.cll南京****股份有限公司江苏市********330000李**0791-12345670791-1234567*****@sina.com周*0791-76543210791-7654321####@china.com网上支付
居然还有这种问题,郁闷伤了
作者: lxhefeiyancao 发布时间: 2011-05-01
jq的text方法只能获取文本内容,节点标签获取不到
jq怎么获取xml包括节点内容不太清楚,不过firefox和ie可以使用下面的代码来序列化xml节点,其他浏览器可能序列化不了
JScript code
或者修改下你的xml内容文件,用cdata节点,然后获取cdata节点里面的内容即可,兼容性只要支持标准xml的操作就行
XML code
JScript code
jq怎么获取xml包括节点内容不太清楚,不过firefox和ie可以使用下面的代码来序列化xml节点,其他浏览器可能序列化不了
JScript code
success: function(dataXML) { //将返回值呈现以查看 $(dataXML).find("Report").each(function(){ $("#msg").html(document.all?$(this)[0].xml:window.XMLSerializer?new XMLSerializer().serializeToString($(this)[0]):'无法序列化XML节点'); }); }
或者修改下你的xml内容文件,用cdata节点,然后获取cdata节点里面的内容即可,兼容性只要支持标准xml的操作就行
XML code
<?xml version="1.0" encoding="utf-8"?> <Report><![CDATA[ <CllFileName>CellOrder.cll</CllFileName> <Client> <Data col="3" row="16" columnName="单位名称">南京****股份有限公司</Data> <Data col="3" row="17" columnName="单位地址">江苏市********</Data> <Data col="9" row="17" columnName="邮编">210000</Data> <Data col="3" row="18" columnName="订购人姓名">李**</Data> <Data col="5" row="18" columnName="订购人电话">0791-1234567</Data> <Data col="7" row="18" columnName="订购人传真">0791-1234567</Data> <Data col="9" row="18" columnName="订购人E-Mail">*****@sina.com</Data> <Data col="3" row="19" columnName="开发人员姓名">周*</Data> <Data col="5" row="19" columnName="开发人员电话">0791-7654321</Data> <Data col="7" row="19" columnName="开发人员传真">0791-7654321</Data> <Data col="9" row="19" columnName="开发人员E-Mail">####@china.com</Data> <Data col="3" row="20" columnName="开票信息">网上支付</Data> <total>100</total> </Client>]]> </Report>
JScript code
success: function(dataXML) { //将返回值呈现以查看 $(dataXML).find("Report").each(function(){ $("#msg").html($(this)[0].firstChild.nodeValue); }); } //end Success
作者: showbo 发布时间: 2011-05-01
each()循环以后 可以这样获得属性 。
var columnName= $(this).attr("columnName");
var columnName= $(this).attr("columnName");
作者: zell419 发布时间: 2011-05-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28