在 JQuery 中从 VS 2005 的 .aspx 页面解析 XML 响应时一无所获
Posted
技术标签:
【中文标题】在 JQuery 中从 VS 2005 的 .aspx 页面解析 XML 响应时一无所获【英文标题】:Getting nothing while parsing XML response from the .aspx page of VS 2005 in JQuery 【发布时间】:2010-10-05 15:59:46 【问题描述】:我无法从 VS 2005 的 .aspx 页面获取 xml 响应数据。以下是在客户端写入 xml 响应的函数:
protected void GetMailContents(double pdblMessageID)
string lstrMailContents = "";
DataSet lobjDs = new DataSet();
StringBuilder stringBuilder = new StringBuilder("<MailContents>");
lobjDs = mobjCProfileAndMail.GetMailContents(pdblMessageID);
if (lobjDs != null)
stringBuilder.Append("<Contents><From>");
stringBuilder.Append(lobjDs.Tables[0].Rows[0]["From"].ToString());
stringBuilder.Append("</From><To>");
stringBuilder.Append(lobjDs.Tables[0].Rows[0]["To"].ToString());
stringBuilder.Append("</To><Subject>");
stringBuilder.Append(lobjDs.Tables[0].Rows[0]["Subject"].ToString());
stringBuilder.Append("</Subject><Message>");
stringBuilder.Append(lobjDs.Tables[0].Rows[0]["Message"].ToString());
stringBuilder.Append("</Message></Contents>");
stringBuilder.Append("</MailContents>");
lstrMailContents = "<?xml version=\"1.0\" encoding=\"utf-8\"?> \n ";
lstrMailContents += stringBuilder.ToString();
Response.ContentEncoding = Encoding.UTF8;
Response.Write(lstrMailContents);
Response.End();
客户端代码:
$(document).ready(function()
var varURL = document.URL;
var varArr = varURL.split('=');
var varMessageID = varArr[1];
$.get("AjaxData.aspx?Mode=MODALDIALOG."+varMessageID, function(data)
$(data).find('Contents').each(function()
var varFrom = $(this).find('From').text();
var varTo = $(this).find('To').text();
var varSubject = $(this).find('Subject').text();
var varMessage = $(this).find('Message').text();
alert(varFrom);
);
);
);
我已经为来自回调的数据编写了一个警报,但什么也没得到。如果我正在解析任何固定的 xml,那么它可以正常工作,但如果从 .aspx 页面获得响应,则什么也得不到。有没有人可以帮我解决这个问题。
谢谢。
【问题讨论】:
【参考方案1】:首先 - 通过连接编写 xml 真的很容易 - 考虑使用 XmlWriter
/ XDocument
/ XmlDocument
代替,这将自动转义任何必要的符号(<
、&
等),而不是导致无效的 xml。
在写入响应缓冲区之前,您是否清除了它?实际上,从原始处理程序 (ashx
) 执行此操作比在 aspx 页面生命周期内执行此操作要简单得多。或者切换到 MVC,其工作方式与 ashx 结果类似。
另外 - 在 jquery 中,您可能应该将 type
指定为 xml
- 请参阅 here。
这是一个合适的处理程序的示例:
public void ProcessRequest(HttpContext context)
context.Response.ContentType = "text/xml";
XmlDocument doc = new XmlDocument();
XmlElement root = (XmlElement) doc.AppendChild(doc.CreateElement("Contents"));
root.AppendChild(doc.CreateElement("From")).InnerText = "some text";
root.AppendChild(doc.CreateElement("To")).InnerText = "some more text";
root.AppendChild(doc.CreateElement("Subject")).InnerText = "this & that";
root.AppendChild(doc.CreateElement("Message")).InnerText = "a < b > c";
doc.Save(context.Response.Output);
【讨论】:
【参考方案2】:首先,这里不需要aspx
- 简单的IHttpHandler
就可以了,而且也是一个更自然的解决方案。
至于问题,请确保在写出 XML 之前清除输出流,并确保 HTTP 标头(特别是 Content-Type
)是正确的。使用 Fiddler 查看幕后情况。
【讨论】:
以上是关于在 JQuery 中从 VS 2005 的 .aspx 页面解析 XML 响应时一无所获的主要内容,如果未能解决你的问题,请参考以下文章