2012-06-27 5 views
0

내 MVC보기 (VS 2012 RC 사용)에서 jQuery를 사용하여 내 컨트롤러에서 반환 된 XML 데이터를 구문 분석하려고합니다. 그러나, 내 초점은 jQuery $ .ajax() 함수를 사용하는 것입니다. 문제는 아약스가 내 컨트롤러에서 XML 문서를 반환하지 않는다는 것입니다. 일부 형식의 HTML을 반환합니다.asp.net mvc 및 jquery

예 : 내가 참으로 안에 내보기에 직접 반환 할 수 있습니다,하지만 전체 XML 문서가 그런 식으로 표시되는 것을 원하지 않는다. 예를 들어, @Model 개체에서 XML을 얻을 :

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

그러나, 나는 많은 내 XML의 문서를 검색하기 위해 $ 아약스()를 사용하는 것을 선호합니다. 유일한 문제는 내 컨트롤러 코드의 반환 값이 XML이 아니라는 것입니다. 형식이 지정된 HTML 텍스트가 반환됩니다.

테스트 div입니다!

표시되는 HTML 형식은 다음과 같습니다.

와우는 어딘가에 있습니까? 내 회사 솔루션 레지스터 로그인 inHomeAboutContactPortfolioPortfolioListPortfolio 목록 This is a test div! © 2012 - 내 ASP.NET MVC ApplicationFacebookTwitter

다음은 jQuery 코드입니다. 나는 DATA 객체에 XML 문서를 갖기를 희망한다.

<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"); 
     } 

    }); 

몇 가지 지침과 조언을 주시면 감사하겠습니다. 아래와 같이 감사합니다, 밥

답변

1

보기가 필요하지 않습니다. 당신은 당신의 컨트롤러 액션에서 직접 XML을 반환 할 수 있습니다 : 당신이 적절한 콘텐츠 형식 응답 헤더를 설정 한 이후 지금

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

, jQuery를 사용하면 직접 작업 할 수있을 것입니다 그것은 당신의 성공 콜백을 구문 분석하는 방법을 알 수 이 XML 스트림.

+0

응답 해 주셔서 감사합니다. 이미 Content (..)을 반환하려고 시도했지만 XML이 브라우저에서 직접 렌더링됩니다. 어딘가에 핵심 코드 조각이 없어 ... –

+0

어쩌면 내가보기 파일을 사용해서는 안된다. 어쩌면 바로 HTML 파일 일 수도 있습니다. –

+0

아니요,보기가 전혀 필요하지 않습니다. –

0

당신은 아마 당신의 아약스() 설정에서 XML로 데이터 유형을 지정해야합니다

$.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가 처리하지 못했습니다. 어떻게 아약스 함수를 부르시겠습니까? dev 콘솔에 JS 오류가 있습니까? – Tommy

+0

URL 형식을 "/ Portfolios/getPortfolios"로 수정 한 경우를 제외하고 답변에 dataType : "XML"을 사용하여 다시 게시 할 때와 마찬가지로 ajax 함수를 호출합니다. 그리고 예, 저는 js 라인에서 충돌합니다 : var $ title = $ xml.find ("portfolioSummary"). text(); (null 또는 undefined). –