[JQUERY] ASP.NET MVC 아약스 오류 처리
JQUERYASP.NET MVC 아약스 오류 처리
해결법
-
1.서버가 200 이상의 일부 상태 코드를 다른를 보내는 경우, 오류 콜백이 실행됩니다
서버가 200 이상의 일부 상태 코드를 다른를 보내는 경우, 오류 콜백이 실행됩니다
$.ajax({ url: '/foo', success: function(result) { alert('yeap'); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert('oops, something bad happened'); } });
그리고 당신은 $ .ajaxSetup () 메소드를 사용할 수있는 전역 오류 핸들러를 등록합니다 :
$.ajaxSetup({ error: function(XMLHttpRequest, textStatus, errorThrown) { alert('oops, something bad happened'); } });
또 다른 방법은 JSON을 사용하는 것입니다. 당신은 예외 JSON 응답으로 변환을 잡는다 서버에서 사용자 지정 작업 필터를 작성할 수 있도록 :
public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter { public void OnException(ExceptionContext filterContext) { filterContext.ExceptionHandled = true; filterContext.Result = new JsonResult { Data = new { success = false, error = filterContext.Exception.ToString() }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } }
다음이 속성을 가진 컨트롤러 액션을 장식 :
[MyErrorHandler] public ActionResult Foo(string id) { if (string.IsNullOrEmpty(id)) { throw new Exception("oh no"); } return Json(new { success = true }); }
그리고 마지막으로 그것을 호출 :
$.getJSON('/home/foo', { id: null }, function (result) { if (!result.success) { alert(result.error); } else { // handle the success } });
-
2.인터넷 검색 후 나는 MVC 액션 필터를 기반으로 처리하는 간단한 예외 쓰기
인터넷 검색 후 나는 MVC 액션 필터를 기반으로 처리하는 간단한 예외 쓰기
public class HandleExceptionAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { if (filterContext.HttpContext.Request.IsAjaxRequest() && filterContext.Exception != null) { filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { filterContext.Exception.Message, filterContext.Exception.StackTrace } }; filterContext.ExceptionHandled = true; } else { base.OnException(filterContext); } } }
과의 Global.asax에 쓰기 :
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleExceptionAttribute()); }
다음 레이아웃 또는 마스터 페이지에서이 스크립트를 작성 :
<script type="text/javascript"> $(document).ajaxError(function (e, jqxhr, settings, exception) { e.stopPropagation(); if (jqxhr != null) alert(jqxhr.responseText); }); </script>
마지막으로 사용자 정의 오류를 설정해야합니다. 그리고 그것을 즐길 :)
-
3.불행하게도, 어느 쪽도 아니 대답은 나를 위해 좋은 없습니다. 놀랍게도이 솔루션은 매우 간단합니다. 컨트롤러에서 돌아 가기 :
불행하게도, 어느 쪽도 아니 대답은 나를 위해 좋은 없습니다. 놀랍게도이 솔루션은 매우 간단합니다. 컨트롤러에서 돌아 가기 :
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, e.Response.ReasonPhrase);
당신이 원하는대로 그리고 클라이언트에서 표준 HTTP 오류로 처리합니다.
-
4.나는 짧은 시간이었고, 그것이 확인 일 때문에 빠른 솔루션을했다. 나는 더 나은 옵션은 예외 필터를 사용하여 생각하지만, 어쩌면 내 솔루션은 간단한 솔루션이 필요하다는 것을 경우에 도움이 될 수 있습니다.
나는 짧은 시간이었고, 그것이 확인 일 때문에 빠른 솔루션을했다. 나는 더 나은 옵션은 예외 필터를 사용하여 생각하지만, 어쩌면 내 솔루션은 간단한 솔루션이 필요하다는 것을 경우에 도움이 될 수 있습니다.
나는 다음을했다. 컨트롤러 방법에서 나는 데이터 내부 속성 "성공"으로 JsonResult을 반환
[HttpPut] public JsonResult UpdateEmployeeConfig(EmployeConfig employeToSave) { if (!ModelState.IsValid) { return new JsonResult { Data = new { ErrorMessage = "Model is not valid", Success = false }, ContentEncoding = System.Text.Encoding.UTF8, JsonRequestBehavior = JsonRequestBehavior.DenyGet }; } try { MyDbContext db = new MyDbContext(); db.Entry(employeToSave).State = EntityState.Modified; db.SaveChanges(); DTO.EmployeConfig user = (DTO.EmployeConfig)Session["EmployeLoggin"]; if (employeToSave.Id == user.Id) { user.Company = employeToSave.Company; user.Language = employeToSave.Language; user.Money = employeToSave.Money; user.CostCenter = employeToSave.CostCenter; Session["EmployeLoggin"] = user; } } catch (Exception ex) { return new JsonResult { Data = new { ErrorMessage = ex.Message, Success = false }, ContentEncoding = System.Text.Encoding.UTF8, JsonRequestBehavior = JsonRequestBehavior.DenyGet }; } return new JsonResult() { Data = new { Success = true }, }; }
이후 아약스 호출 난 그냥 예외를 가지고 있는지 알고이 부동산에 대한 질문 :
$.ajax({ url: 'UpdateEmployeeConfig', type: 'PUT', data: JSON.stringify(EmployeConfig), contentType: "application/json;charset=utf-8", success: function (data) { if (data.Success) { //This is for the example. Please do something prettier for the user, :) alert('All was really ok'); } else { alert('Oups.. we had errors: ' + data.ErrorMessage); } }, error: function (request, status, error) { alert('oh, errors here. The call to the server is not working.') } });
도움이 되었기를 바랍니다. 해피 코드! :피
-
5.aleho의 반응과 일치 여기에 완벽한 예입니다. 그것은 마법처럼 작동하고 매우 간단합니다.
aleho의 반응과 일치 여기에 완벽한 예입니다. 그것은 마법처럼 작동하고 매우 간단합니다.
컨트롤러 코드
[HttpGet] public async Task<ActionResult> ChildItems() { var client = TranslationDataHttpClient.GetClient(); HttpResponseMessage response = await client.GetAsync("childItems); if (response.IsSuccessStatusCode) { string content = response.Content.ReadAsStringAsync().Result; List<WorkflowItem> parameters = JsonConvert.DeserializeObject<List<WorkflowItem>>(content); return Json(content, JsonRequestBehavior.AllowGet); } else { return new HttpStatusCodeResult(response.StatusCode, response.ReasonPhrase); } } }
뷰에서 자바 스크립트 코드
var url = '@Html.Raw(@Url.Action("ChildItems", "WorkflowItemModal")'; $.ajax({ type: "GET", dataType: "json", url: url, contentType: "application/json; charset=utf-8", success: function (data) { // Do something with the returned data }, error: function (xhr, status, error) { // Handle the error. } });
이 다른 사람을 도움이되기를 바랍니다!
-
6.클라이언트 측에서 아약스 호출에서 오류를 처리하기 위해, 당신은 아약스 호출의 오류 옵션에 기능을 할당 할 수 있습니다.
클라이언트 측에서 아약스 호출에서 오류를 처리하기 위해, 당신은 아약스 호출의 오류 옵션에 기능을 할당 할 수 있습니다.
이 기능은 여기에 설명 사용할 수있는, 세계적으로 디폴트를 설정하려면 : http://api.jquery.com/jQuery.ajaxSetup.
from https://stackoverflow.com/questions/4707755/asp-net-mvc-ajax-error-handling by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 속성에 의해 선택 요소 (0) | 2020.10.26 |
---|---|
[JQUERY] jQuery로 JSON 트리를 검색하는 방법 (0) | 2020.10.26 |
[JQUERY] 어떻게 조건부 액션 버튼을 추가하는 무료있는 jqGrid 속성을 사용하는 방법 (0) | 2020.10.26 |
[JQUERY] 동적 그리드 호출기 ID를 해결할 수있는 jqGrid? (0) | 2020.10.26 |
[JQUERY] JS 문자열 작동하지 REPLACE [중복] (0) | 2020.10.26 |