ajax获取异常信息,jQueryAjax错误处理,显⽰⾃定义异常消息有没有什么⽅法可以在jQuery AJAX错误消息中显⽰⾃定义异常消息作为警告?
例如,如果我想通过Struts by throw new ApplicationException("User name already exists");在服务器端抛出异常,我想在jQuery AJAX错误消息中捕获这条消息("user name already exists")。
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编写异常消息,然后使⽤…
. .在你的javascript。
两年半过去了,这仍然是正确的做法。)我更进⼀步,返回了我⾃⼰的错误JSON对象,它可以处理单个或多个错误,这对于服务器端表单验证⾮常好。
你能提供代码吗?
@Wilson在这⾥的其他⾼评分答案中也显⽰了这⼀点。
现在是2014年。JSON主导的时代。所以我使⽤sponseJSON。:D
xhr。只有在确保设置了元类型(例如。"application / json - type:")。这是我刚遇到的⼀个问题;responseText已设置- responseJSON未设置。
控制器:
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) {
sponseText);
}
});
这不是对问题的"正确"回答,但它肯定显⽰了对问题的更⾼层次的解决⽅案……好了!
我也在做类似的事情。如果⼀切都是在开发框上完成的,那么它可以很好地⼯作。如果我尝试从⽹络上的另⼀个盒⼦xhr连接。responseText包含通⽤错误页⾯html,⽽不是我的⾃定义消息,请参阅stackoverflow/questions/3882752/…
我认为你也应该加上回应。StatusCode = 500;⾏到OnException⽅法。
我修改了这个—因为我想要500个状态代码,但是在状态描述中有异常消息(⽽不是"内部服务器错误")—response.StatusCode =
(int)HttpStatusCode.InternalServerError;和response.StatusDescription = filterContext.Exception.Message;
使⽤IIS7和IOS (iPhone / iPad / iPod),我使⽤了上⾯的脚本和下⾯的代码⾏:responce。TrySkipIisCustomErrors = true;和反应。StatusCode = (int) HttpStatusCode.InternalServerError;
@AlexanderProkofyev响应已经被设置为500,因为它正在执⾏OnException⽅法。
在我的实例中,响应没有设置为500(我使⽤的正是这段代码),因此错误不会被客户端捕获……
我添加了标记代码,这是有效的,谢谢!
如果您正在使⽤IIS7或更⾼版本,您可能需要添加:response。TrySkipIisCustomErrors = true;
⼀个⼩的吹⽑求疵,但是在error: function (request, status, error) {中request实际上应该被命名为response。参数是你得到的响应,⽽不是你提出的请求。
服务端:
doPost(HttpServletRequest request, HttpServletResponse response){
try{ //logic
}catch(ApplicationException exception){
response.setStatus(400);
//just added semicolon to end of line
}
}
ClientSide:
jQuery.ajax({// just showing error property
error: function(jqXHR,error, errorThrown) {
if(jqXHR.status&&jqXHR.status==400){
sponseText);
}else{
alert("Something went wrong");
}
}
});
通⽤Ajax错误处理
如果我需要对所有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
.";
}
}else if(exception=='parsererror'){
message="Error.
Parsing 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
.";
}
$(this).css("display","inline");
$(this).html(message);
});
You need to convert the responseText to JSON. Using JQuery:
jquery是什么有什么作用jsonValue = jQuery.parseJSON( sponseText );
console.log(jsonValue.Message);
因为这是⽬前唯⼀正确的答案!您可以调⽤"jsonValue"。获取异常消息。
实际上,这不是正确的答案,因为问题没有询问JSON,⽽⽰例请求特别要求HTML作为响应。
+ 1正确。注意,通常通过jqXHR发送JSON编码的对象。responseText(字符串)。然后,您可以根据需要使⽤jsonValue对象。使⽤Firebug控制台使⽤console.log(jsonValue)检查响应。
这就得到了"Uncaught SyntaxError: Unexpected number"
通过jqXHR对象的responseJSON属性可以使⽤解析后的JSON对象。因此不需要解析responseText属性。你只需要做:控制台。⽇志(sponseJSON.Message)
如果调⽤asp,这将返回错误消息标题:
我没有亲⾃编写formatErrorMessage的所有内容,但是我发现它⾮常有⽤。
function formatErrorMessage(jqXHR, exception) {
if (jqXHR.status === 0) {
return ('Not connected.
Please 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.
' + sponseText);
}
}
var jqxhr = $.post(addresshere, function() {
alert("success");
})
.done(function() { alert("second success"); })
.fail(function(xhr, err) {
var responseTitle= $(sponseText).filter('title').get(0);
alert($(responseTitle).text() +"
" + formatErrorMessage(xhr, err) );
})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论