[jquery] jQuery Ajax 오류 처리, 사용자 정의 예외 메시지 표시
jQuery AJAX 오류 메시지에 사용자 정의 예외 메시지를 경고로 표시 할 수있는 방법이 있습니까?
예를 들어 Struts by 를 통해 서버 측에서 예외를 throw throw new ApplicationException("User name already exists");
하려면 jQuery AJAX 오류 메시지에서이 메시지 ( ‘사용자 이름이 이미 존재합니다’)를 잡으려고합니다.
jQuery("#save").click(function () {
if (jQuery('#form').jVal()) {
jQuery.ajax({
type: "POST",
url: "saveuser.do",
dataType: "html",
data: "userId=" + encodeURIComponent(trim(document.forms[0].userId.value)),
success: function (response) {
jQuery("#usergrid").trigger("reloadGrid");
clear();
alert("Details saved successfully!!!");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
});
두 번째 경고에서 발생한 오류를 경고하는 메시지가 표시 undefined
되며 상태 코드는 500입니다.
내가 어디로 잘못 가고 있는지 잘 모르겠습니다. 이 문제를 해결하려면 어떻게해야합니까?
답변
Response.StatusCode
200이 아닌 다른 값으로 설정했는지 확인하십시오.를 사용하여 예외 메시지를 작성한 Response.Write
후 다음을 사용하십시오.
xhr.responseText
.. 당신의 자바 스크립트에서.
답변
제어 장치:
public class ClientErrorHandler : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
var response = filterContext.RequestContext.HttpContext.Response;
response.Write(filterContext.Exception.Message);
response.ContentType = MediaTypeNames.Text.Plain;
filterContext.ExceptionHandled = true;
}
}
[ClientErrorHandler]
public class SomeController : Controller
{
[HttpPost]
public ActionResult SomeAction()
{
throw new Exception("Error message");
}
}
스크립트보기 :
$.ajax({
type: "post", url: "/SomeController/SomeAction",
success: function (data, text) {
//...
},
error: function (request, status, error) {
alert(request.responseText);
}
});
답변
서버 측:
doPost(HttpServletRequest request, HttpServletResponse response){
try{ //logic
}catch(ApplicationException exception){
response.setStatus(400);
response.getWriter().write(exception.getMessage());
//just added semicolon to end of line
}
}
고객 입장에서:
jQuery.ajax({// just showing error property
error: function(jqXHR,error, errorThrown) {
if(jqXHR.status&&jqXHR.status==400){
alert(jqXHR.responseText);
}else{
alert("Something went wrong");
}
}
});
일반 Ajax 오류 처리
모든 아약스 요청에 대해 일반적인 오류 처리가 필요한 경우. ajaxError 핸들러를 설정하고 html 컨텐츠 맨 위에 errorcontainer라는 div에 오류를 표시합니다.
$("div#errorcontainer")
.ajaxError(
function(e, x, settings, exception) {
var message;
var statusErrorMap = {
'400' : "Server understood the request, but request content was invalid.",
'401' : "Unauthorized access.",
'403' : "Forbidden resource can't be accessed.",
'500' : "Internal server error.",
'503' : "Service unavailable."
};
if (x.status) {
message =statusErrorMap[x.status];
if(!message){
message="Unknown Error \n.";
}
}else if(exception=='parsererror'){
message="Error.\nParsing JSON Request failed.";
}else if(exception=='timeout'){
message="Request Time out.";
}else if(exception=='abort'){
message="Request was aborted by the server";
}else {
message="Unknown Error \n.";
}
$(this).css("display","inline");
$(this).html(message);
});
답변
responseText
를 JSON 으로 변환해야합니다 . JQuery 사용하기 :
jsonValue = jQuery.parseJSON( jqXHR.responseText );
console.log(jsonValue.Message);
답변
asp.net을 호출하면 오류 메시지 제목이 반환됩니다.
formatErrorMessage를 직접 작성하지는 않았지만 매우 유용합니다.
function formatErrorMessage(jqXHR, exception) {
if (jqXHR.status === 0) {
return ('Not connected.\nPlease verify your network connection.');
} else if (jqXHR.status == 404) {
return ('The requested page not found. [404]');
} else if (jqXHR.status == 500) {
return ('Internal Server Error [500].');
} else if (exception === 'parsererror') {
return ('Requested JSON parse failed.');
} else if (exception === 'timeout') {
return ('Time out error.');
} else if (exception === 'abort') {
return ('Ajax request aborted.');
} else {
return ('Uncaught Error.\n' + jqXHR.responseText);
}
}
var jqxhr = $.post(addresshere, function() {
alert("success");
})
.done(function() { alert("second success"); })
.fail(function(xhr, err) {
var responseTitle= $(xhr.responseText).filter('title').get(0);
alert($(responseTitle).text() + "\n" + formatErrorMessage(xhr, err) );
})
답변
이것이 내가 한 일이며 지금까지 MVC 5 응용 프로그램에서 작동합니다.
컨트롤러의 반환 유형은 ContentResult입니다.
public ContentResult DoSomething()
{
if(somethingIsTrue)
{
Response.StatusCode = 500 //Anything other than 2XX HTTP status codes should work
Response.Write("My Message");
return new ContentResult();
}
//Do something in here//
string json = "whatever json goes here";
return new ContentResult{Content = json, ContentType = "application/json"};
}
그리고 클라이언트 쪽에서 이것은 아약스 기능이 어떻게 생겼는지입니다.
$.ajax({
type: "POST",
url: URL,
data: DATA,
dataType: "json",
success: function (json) {
//Do something with the returned json object.
},
error: function (xhr, status, errorThrown) {
//Here the status code can be retrieved like;
xhr.status;
//The message added to Response object in Controller can be retrieved as following.
xhr.responseText;
}
});
답변
답을 위해 2016 년에 누군가가 여기에 있다면 jQuery 3.0에서 사용되지 않는 .fail()
오류 처리 .error()
에 사용하십시오
$.ajax( "example.php" )
.done(function() {
alert( "success" );
})
.fail(function(jqXHR, textStatus, errorThrown) {
//handle error here
})
나는 그것이 도움이되기를 바랍니다