2013-03-05 2 views
2

MVC 3을 사용 중이고 187 개의 이름 값 쌍 (예 : List<OrientationData>)을 가진 JsonResult를 반환하는 액션이 ​​있지만 종종 ajax 호출에서받은 데이터가 잘리고 구문 분석 할 수 없습니다.JsonResult가 잘린 경우

이것은 항상 JsonResult를 통해 동일한 187 개 항목을 반환하므로 길이 문제 일 경우 나는 그것이 항상 실패 할 것이라고 생각합니다.

[HttpPost] 
    public JsonResult GetAllMetrics() 
    { 
     var metrics = metric.GetAllMetrics(); 
     return Json(metrics); 
    } 

이 JQuery와 아약스 호출입니다 :

$.ajax({ 
      url: urlGetAllMetrics, 
      type: 'POST', 
      data: jsonData, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (ajaxData) { 
       if (ajaxData && ajaxData.length > 0) { 
        //populate data here 
       } 
      }, 
      error: function (msg) { 
       alert(msg); 
      } 
     }); 

결과는 아약스 호출에 반환 때때로 차단 및 표시되어 실제로 2 개 개의 다른 장소에서 차단하는 다음 작업입니다. 이것에 대한 가능한 이유는 무엇입니까?

나는 Fiddler를 사용하여 트래픽을 캡처 할 때 반환 된 데이터를 자르지 않고도 항상 작동한다는 점에 유의하고 싶습니다. 이유는 아직 없습니다. Fiddler를 사용하지 않으면 json에 문자열을 구문 분석 할 수 없기 때문에 종종 아약스에서 오류가 발생합니다. 데이터는 Value 및 Text 문자열 속성이있는 배열입니다. 텍스트는 반환 차단되고 :

...,{"Value":"h12","Text":"h12 name goes here"},{"Val 

답변

0

에 대한 답과 같이 내가으로 WebHttpBinding을 사용하여 WCF 서비스에 추가

나는 ...이 문제에 대한 해결책을 알아 내기 때문에 없습니다 WCF: maxStringContentLength always set to 8192 나는 서비스 클래스에 다음과 같은 속성 설정 :

:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

및 추가해야합니다 만든 DataContract와 DataMember를가 기본이되는 클래스 속성을

나는이에 (인터페이스에 OperationContract를 함께 현재) 방법을 전환 : 내가 더 나은 대답을했다 좋겠지 만, 다른 사람이이 문제에 걸쳐 실행하는 경우,이 1 개 방식입니다

public List<OrientationData> GetAllMetrics() 
    { 
     var metrics = metric.GetAllMetrics(); 
     return metrics; 
    } 

그것을 통해 얻을. 물론 MVC 4로 전환하면 다른 게시물의 David Murdoch에 언급 된대로 this answer을 통해 문제를 해결할 수 있습니다.

1

그것은 때문에 기본값 (10만2천4백-1백킬로바이트)의 절단 될 maxJsonLength 재산의. 당신의 Web.config에서 변경 시도 :

<configuration> 
    <system.web.extensions> 
     <scripting> 
      <webServices> 
       <jsonSerialization maxJsonLength="50000000"/> 
      </webServices> 
     </scripting> 
    </system.web.extensions> 
</configuration> 
+0

제안 해 주셔서 감사합니다. 그러나 저에게는 도움이되지 않았습니다. 텍스트는 여전히 끊어지고 있습니다. 그것이 시간의 일부를 작동하기 때문에, 나는 길이 문제가 아니라고 생각했다. 나는 이상한 일들이 일어났다 고 확신한다. – DougJones

+0

그것은? 그렇다면 내부적으로 사용되는 'JavaScriptSerializer'에 설정된 한계 일 것입니다. 이 답변에서 코드를 구현해보십시오. http://stackoverflow.com/a/7207539/1039608 – mattytommo