2012-12-21 7 views
0

ASP.NET MVC 3 기반 응용 프로그램을 개발 중이며 Ajax POST (jQuery를 통해)를 컨트롤러 동작 중 하나에 수행하려고 할 때 간헐적 인 문제가 발생합니다. 때로는 컨트롤러 동작이 제대로 호출되고 코드가 예상대로 수행되지만 컨트롤러 동작이 호출되지 않으며 브라우저가 기본적으로 요청이 시간 초과 될 때까지 기본적으로 응답하지 않는 경우가 있습니다.Ajax POST가 때때로 ASP.NET MVC 컨트롤러 동작을 호출하지 못합니다.

우리는 문제를 일관되게 재현 할 수 없기 때문에 실망합니다. 다른 한편으로, 우리는 너무 자주 노력하지 않고도 그런 일이 자주 일어날 수 있도록 자주 발생합니다. Firebug의 "Net"탭에서 브라우저가 확실히 POST 요청을하는 것을 볼 수 있으며 올바른 URL을 치고 있음을 알 수 있습니다. 제가 아직 해본 적이없는 한 가지,하지만 다른 곳에서 제안한 것을 보았습니다. 중간에 피들러 (Fiddler)를 설정하여 요청이 얼마나 멀리 있는지 봅니다. 그러나 웹 서버 (IIS)까지 확장한다고 가정하면이 디버깅의 다음 단계는 무엇이되어야합니까? 강력한 Windows/.NET/IIS 배경이 없으므로 어디서부터 시작해야할지 모르겠습니다.

업데이트 :

다음은 POST 수행하는 jQuery 코드입니다 :

var self = this; 
var jsonData = foo.toJSONString(); 

$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    url: '/MyController/AddFoo', 
    data: { foo: jsonData }, 
    success: function (data) { 
     self.showSuccessfulSubmissionDialog(); 
    }, 
    error: function (xhr, textStatus, error) { 
     self.showUnsuccessfulSubmissionDialog(xhr.responseText); 
    } 
}); 

가 여기에 컨트롤러 액션에 대한 C# 코드입니다 : (

[HttpPost] 
[Authorize] 
public JsonNetResult AddFoo(string foo) 
{ 
    var fooObject = JsonConvert.DeserializeObject<Foo>(foo, SerializerSettings); 
    try 
    { 
     // Do something with fooObject 
    } 
    catch (Exception ex) 
    { 
     var formattedString = ex.Message.Replace("\r\n", " "); 
     return BuildErrorResult("An error occured writing data to the server: " + 
      formattedString); 
    } 
    return BuildSuccessResult(); 
} 

몇 가지 사소한 세부 사항 특히 변수 이름)이 변경되었지만 그 요지는 여기에 나와 있습니다. 또한 이전에 언급했듯이,이 "breaks"가 발생했을 때 Firebug는 POST가 실행되었다고 주장하지만 컨트롤러 액션이 시작될 때 브레이크 포인트에 도달하지 않습니다. 그래서 어딘가에도 공은 떨어졌습니다. 그렇지 않은 경우를 제외하고 컨트롤러 동작은 문제없이 실행됩니다.

+0

POST 및 서버 동작 코드를 표시 할 수 있습니까? – rae1

+0

IIS7을 사용하는 경우 실패한 요청 추적을 사용하여 사용자가 찾을 수있는 것을 볼 수 있습니다. http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/using-failed-request-tracing-rules-to-troubleshoot-application-request-routing-arr – HackedByChinese

+0

@ rae1n, 나는 클라이언트 측 POST 및 서버 측 컨트롤러 작업을위한 코드가 추가되었습니다. –

답변

0

"성공"대신 "완료"를 사용하는 한 가지 방법은 서버가 200 개의 상태 코드를 반환하면 성공을 시작하는 것입니다. 요청이 완료 될 때마다 완료가 실행됩니다.

$.ajax({ 
... 
    complete: function(jqXHR, textStatus) { 
     self.showUnsuccessfulSubmissionDialog(xhr.responseText); 
    } 
... 
}); 
관련 문제