저는 ASP.Net MVC를 사용하고 있습니다. 그러나 이것은 모든 프레임 워크에 적용됩니다.jQuery AJAX 및 다른 dataTypes 처리
대부분의 경우 보통의 HTML을 반환하는 Ajax 호출을 내 서버에 보내지 만 오류가 발생하면 상태 메시지가있는 JSON 객체를 반환하고 싶습니다. 다른 것들). jQuery 호출에서 dataType
옵션을 사용하여이 작업을 처리 할 수있는 방법이없는 것 같습니다. 기본적으로 모든 것을 html로 구문 분석하여 "{ status: 'error', message: 'something bad happened'}"
으로 채워진 <div>
으로 이어지는 것으로 보입니다.
[편집] dataType
개체를 무시하고 jQuery가 알아낼 수 있도록합니다. 결과의 유형을 string
으로보고 HTML로 처리합니다.
내가 한 가지 해결책은 결과 개체를 JSON으로 구문 분석하려고하는 것입니다. 작동한다면 JSON 객체라는 것을 알게됩니다. 예외를 throw하는 경우는 HTML입니다 : 그러나
$.ajax({
data: {},
success: function(data, textStatus) {
try {
var errorObj = JSON.parse(data);
handleError(errorObj);
} catch(ex) {
$('#results').html(data);
}
},
dataType: 'html', // sometimes it is 'json' :-/
url: '/home/AjaxTest',
type: 'POST'
});
, 그 방법으로 예외를 사용하는 나 같은 아주 나쁜 디자인 (그리고 적어도 말을 직관적)을 친다. 더 좋은 방법이 있습니까? JSON 객체에서 전체 응답을 래핑하는 방법을 생각했지만,이 상황에서는 옵션이라고 생각하지 않습니다.
// ASP.NET MVC Action:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AjaxTest(int magic) {
try {
var someVal = GetValue();
return PartialView("DataPage", someVal);
} catch (Exception ex) {
this.HttpContext.Response.StatusCode = 500;
return Json(new { status = "Error", message = ex.Message });
}
}
// jQuery call:
$.ajax({
data: {},
success: function(data, textStatus) {
$('#results').html(data);
},
error: function() {
var errorObj = JSON.parse(XMLHttpRequest.responseText);
handleError(errorObj);
},
dataType: 'html',
url: '/home/AjaxTest',
type: 'POST'
});
흠, 흥미로운 상황,하지만 서로 다른 형태를 돌려주는 방법을 가진 경우 모르겠어요은 좋은 생각이다 상태 메시지를 반환하는 다른 메서드를 호출하십시오. –