2010-08-09 5 views
2

jQuery를 사용하여 JSON 데이터를 가져온 다음 간단히 성공/실패 메시지를 표시하는 POST를 만드는 MVC 페이지의 비교적 간단한 예가 있습니다. 코드는 다른 브라우저에서는 완벽하게 작동하지만 IE7/8에서는 4/5 회 실패합니다. 여기

는 MVC보기 페이지입니다 :

<asp:Content runat="server" ContentPlaceHolderID="MainContent"> 
    <p id="message"></p> 
</asp:Content> 

<asp:Content runat="server" ContentPlaceHolderID="HeadContent"> 
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery-1.4.1.min.js") %>"></script> 

    <script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      type:"POST", 
      url: "<%= Url.Action("GetData") %>", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(data){ 
       $("#message").html("success"); 
      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown){ 
       $("#message").html("error: " + textStatus + "<br/>exception:" + errorThrown); 
      } 
     }); 
    }); 
    </script> 
</asp:Content> 

컨트롤러뿐만 아니라 매우 간단하다 :

[HttpPost] 
public ActionResult GetData() 
{ 
    IList<string> people = new List<string> 
    { 
     "A", 
     "B", 
     "C", 
     "D", 
     "E" 
    }; 

    return Json(people); 
} 

은 대략 매 5 번에서 IE 4에 실패 할 것으로 보인다. 컨트롤러에 일부 로깅 코드를 삽입하고 실패 할 때마다 컨트롤러 동작을 호출합니다. 아무도 내가 여기서 잘못하고있는 것을 보지 못합니까?

내 오류 처리기 함수에 도달하면 textStatus는 "error"로 설정되고 errorThrown은 정의되지 않습니다.

+0

데이터로''{} ''대신'{}'(또는'null')을 사용하십시오. 이것이 문제인지는 모르겠지만''{} ''을 보내면 유효한 키/값 쌍으로 변환 할 것이라고 생각하지 않습니다. 편집 : JSON 바인더를 설정하지 않았다면 액션에 보내는 JSON을 알게되었지만이 문제는 –

+0

일 수 있습니다. 답변을 제출하려면 답변으로 표시하겠습니다. – Dismissile

답변

2

"{}" 대신 {} (또는 null)을 데이터로 사용해보십시오.

작업에 JSON을 보내면 (contentType이 JSON으로 설정 됨) JSON Value Provider Factory가 설정되어 있지 않으면 문제의 원인 일 수 있습니다.

Phil Haack의 기사 (Sending JSON to an ASP.NET MVC Action Method Argument)를 보시려면 여기를 클릭하십시오.