2012-06-27 4 views
0

В моем представлении MVC (с использованием VS 2012 RC) я пытаюсь использовать jQuery для анализа данных XML, возвращаемых с моего контроллера. Однако я сфокусирован на использовании функции jQuery $ .ajax() . Проблема в том, что ajax НЕ возвращает XML-документ от моего контроллера; он возвращает некоторый отформатированный Html.asp.net mvc и jquery

Пример: I может действительно вернуть его непосредственно на мой взгляд внутрь, но я не хочу, чтобы весь XML документ отображается таким образом. Например, получить XML из объекта @model:

@model RazorMvc.Models.PortfolioResponse 
@{ 
    ViewBag.Title = "PortfolioList"; 
}    
... 
<div class="XmlResp"> 
     <@Html.Raw(@Model.XmlPortfolioResponse.OuterXml.ToString())> 
</div> 

ОДНАКО, я предпочел бы использовать $ .ajax(), чтобы получить мой XML Doc. Единственная проблема заключается в том, что возвращаемое значение из моего кода контроллера НЕ является XML; он возвращает некоторый отформатированный текст HTML:

Это тестовый div !!!

Что отображается в формате HTML:

Wow мы получаем где-то? !!! Моя компания SolutionsRegisterLog inHomeAboutContactPortfoliosPortfolioListPortfolio ListingThis является тестовым div !!! © 2012 - My ASP.NET MVC ApplicationFacebookTwitter

Вот код jQuery. Я хотел бы надеяться, чтобы получить XML-документ в объекте DATA:

<script type="text/javascript"> 
    $.ajax({ 
     url: "/Portfolios/PortfolioList", 
     type: "POST", 
     async: true, 
     success: function(data){ 
      if (!data) 
       alert("No xml data returned."); 
      else{ 
       var $xml = $(data); 
       var $title = $xml.find("portfolioSummary").text(); 

       $('.xmlTest').text("Wow are we getting somewhere ?!!!"); 
       $('.xmlTest').append($xml.text()); 
       alert("success!");     
      } 
     }, 
     error: function (error) { 
      alert("failed"); 
     } 

    }); 

Некоторые рекомендации и советы будут оценены. Спасибо, Bob

ответ

1

Вам не нужно изображение. Вы можете вернуть XML прямо из вашего действия контроллера:

[HttpPost] 
public ActionResult PortfolioList() 
{ 
    string xml = ... 
    return Content(xml, "text/xml"); 
} 

Теперь, так как вы установили заголовок ответа типа надлежащего содержания, JQuery будет знать, как разобрать его и в вашем успехе обратного вызова вы сможете напрямую работать с этим потоком XML.

+0

спасибо, что ответите. Я уже пытался вернуть Content (..), но XML получает визуализацию в браузере напрямую. Мне не хватает ключевого фрагмента кода ... –

+0

Возможно, я должен попробовать НЕ использовать файл View; может быть, просто прямой HTML-файл. –

+0

Нет, вам совсем не нужен вид. –

0

Вы, вероятно, нужно указать тип данных, XML в вашем .ajax() настройки, как показано ниже

$.ajax({ 
      url: "/Portfolios/PortfolioList", 
      type: "POST", 
      //add this line 
      dataType: "XML", 
      async: true, 
      success: function(data){ 
       if (!data) 
        alert("No xml data returned."); 
       else{ 
        var $xml = $(data); 
        var $title = $xml.find("portfolioSummary").text(); 

        $('.xmlTest').text("Wow are we getting somewhere ?!!!"); 
        $('.xmlTest').append($xml.text()); 
        alert("success!");     
       } 
      }, 
      error: function (error) { 
       alert("failed"); 
      } 

     }); 

Есть и другие варианты, а также из JQuery documentation на этой функции в зависимости от вашего требуется

+0

Благодарю вас, но он все равно отображает XML-документ непосредственно в браузере (IE в моем случае). Кажется, мой контроллер НЕ возвращает XML обратно в процедуру jQuery ajax. –

+0

@bob Да, я видел ту же проблему (с JSON) и JQuery, не обрабатывая ее. Как вы называете функцию ajax? Получаете ли вы какие-либо ошибки JS в вашей консоли разработчика? – Tommy

+0

Я вызываю функцию ajax так же, как вы повторно разместили в своем ответе (с помощью dataType: «XML»), ЗА ИСКЛЮЧЕНИЕМ Я изменил URL как «/ Portfolios/getPortfolios». И да, я рушился на строке js: var $ title = $ xml.find ("portfolioSummary"). Text(); (null или undefined). –