C # Post AJAX 빈 json 결과
페이지를 다시로드하지 않고 작업을 수행하고 결과를 반환하기 위해 POST ajax 요청을합니다.
이를 위해 JSON 결과를 사용합니다. 문제는 "foo.DoSyncAction (id)"작업을 실행하는 데 시간이 걸리면 반환 된 메시지가 null이라는 것입니다.
예를 들어 예외가 발생하면 예외가 포착되지만 그의 메시지는 null입니다.
예외가 발생하지 않고 "actionResult"가 null 인 경우에도 마찬가지입니다.
시간이 덜 걸리는 작업을 사용하면 반환 된 메시지가 null 또는 비어 있지 않습니다.
디버그 모드에서는 발생하지 않으며 내 페이지에 반환 된 메시지가 null이 아닙니다.
잊어 버렸거나 뭔가 잘못하고있는 것 같지만 무엇이 잘못되었는지 알아낼 수 없습니다.
[HttpPost]
public JsonResult SomeAction(int id)
{
try
{
Foo foo = new Foo();
var actionResult = foo.DoSyncAction(id);
return Json(new { ok = true, data = actionResult }, JsonRequestBehavior.AllowGet); ;
}
catch (Exception ex)
{
return Json(new { data = ex == null ? "null ex" : (string.IsNullOrEmpty(ex.Message) ? "this exception is empty" : ex.Message) }, JsonRequestBehavior.AllowGet);
}
}
내 AJAX 쿼리 :
$.ajax({
url: '@Url.Action("SomeAction", "MyController")',
dataType: 'json',
data: { id: myID },
type: 'POST',
success: function (response) {
if (response.ok) {
// When everything is ok
console.log(response.data);
} else {
// When an exception is thrown
console.log("An error occurred : " + response.data);
}
},
error: function (error) {
console.log("An error occurred : " + error.responseText);
}
});
다음은 비슷한 상황의 예입니다. dotnetfiddle.net/cG2L0u 10 초 동안 기다린 Sagnalrac 예제를 사용했는데 문제가 발생했습니다. 항목 목록이 더 이상 표시되지 않고 console.log가 빈 문자열을 반환합니다. .NET 4.8과 함께 ASP MVC 5를 사용하고 있습니다.
답변
문제를 해결했지만 여전히 오해가 있습니다.
내 메서드는 메서드를 실행하는 계정과 관련된 예외를 체계적으로 반환합니다 (그래서 디버그에서는 작동하지만 웹 서버에서는 작동하지 않습니다. 사용 된 계정이 다르기 때문입니다).
이상한 점은 내 메서드가 예외를 throw하고 심지어 그것을 잡아서 우편으로 보낼 수 있다는 것입니다. 그러나 컨트롤러가 예외를 포착하면 그녀는 비어 있거나 null입니다. 이 문제를 자세히 살펴 보겠습니다.
문제를 해결 한 후 2 분의 시간 제한을 추가하려고했지만 문제가 발생하지 않았습니다 (예제에서 dotnetfiddle 구성이 내 것과 다른 것으로 생각하므로 예외가 표시되지 않습니다).