在 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 代替,这将自动转义任何必要的符号(&lt;&amp; 等),而不是导致无效的 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 响应时一无所获的主要内容,如果未能解决你的问题,请参考以下文章

VS2008 中的断言,但 VS2005 中没有

如何在 VS 2017 中从其他编译器编译代码 [关闭]

安装 vs2005, vs2008 报错

vs2005安装失败

vs2005不能调试ASP.NET程序

手动生成 VS 2005 .vcproj