Ничего не получая при разборе XML-ответа со страницы .aspx VS 2005 в JQuery - PullRequest
1 голос
/ 05 февраля 2009

Я не могу получить данные ответа xml со страницы .aspx VS 2005. Ниже приводится функция, которая записывает ответ 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 ничего не получится. Есть ли кто-нибудь, кто может помочь мне с этой проблемой.

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 февраля 2009

Во-первых, написание xml через конкатенацию действительно ненадежно - рассмотрите возможность использования XmlWriter / XDocument / XmlDocument вместо этого, что будет автоматически экранировать любые необходимые символы (<, & и т. Д.), А не приведет к неверный xml.

Вы очистили буфер ответов перед записью в него? В действительности было бы намного проще сделать это из необработанного обработчика (ashx), чем из жизненного цикла страницы aspx. Или переключитесь на MVC, который работает аналогично результату ashx.

Также - из jquery вы, вероятно, должны указать type как xml - см. здесь .

Вот пример подходящего обработчика:

    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);
    }
0 голосов
/ 05 февраля 2009

Во-первых, здесь не нужно aspx - обычный IHttpHandler подойдет и также будет более естественным решением.

Что касается вопроса, убедитесь, что вы очистили поток вывода перед записью XML и убедитесь, что заголовки HTTP (особенно Content-Type) верны. Используйте Fiddler, чтобы увидеть, что происходит под капотом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...