有没有什么方法可以在我的jQuery AJAX错误消息中将自定义异常消息显示为警报?
例如,如果我想通过 throw new ApplicationException("User name already exists");
通过 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 .
我不知道我哪里出错了 . 我该怎么做才能解决这个问题?
20 回答
我发现这很好,因为我可以解析我从服务器发送的消息,并在没有堆栈跟踪的情况下向用户显示友好消息...
您需要将
responseText
转换为JSON . 使用JQuery:首先,我们需要在web.config中设置<serviceDebug includeExceptionDetailInFaults =“True”/>:
除了在错误部分的jquery级别,你需要解析包含异常的错误响应,如:
然后使用r.Message,您可以实际显示异常文本 .
检查完整代码:http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
使用以下命令在服务器上抛出新异常:
Response.StatusCode = 500
Response.StatusDescription = ex.Message()
我相信StatusDescription会返回到Ajax调用...
例:
一般/可重用的解决方案
这个答案是为了将来参考所有碰到这个问题的人提供的 . 解决方案包括两件事:
在服务器上验证失败时抛出
Custom exception
ModelStateException
(当我们使用数据注释并使用强类型控制器操作参数时,模型状态报告验证错误)Custom controller action error filter
HandleModelStateExceptionAttribute
捕获自定义异常并返回HTTP错误状态,并在正文中显示模型状态错误这为jQuery Ajax调用提供了最佳基础结构,可以充分利用
success
和error
处理程序 .客户端代码
服务器端代码
整个问题在this blog post中有详细说明,您可以在其中找到在您的应用程序中运行此代码的所有代码 .
如果有人在2016年作为答案,请使用
.fail()
进行错误处理,因为从jQuery 3.0开始不推荐使用.error()
我希望它有所帮助
在代码错误中ajax请求catch错误连接客户端到服务器如果要显示应用程序的显示错误消息在成功范围内发送
如
这就是我所做的,它在MVC 5应用程序中迄今为止起作用 .
Controller的返回类型是ContentResult .
在客户端,这就是ajax功能的样子
jQuery.parseJSON对成功和错误很有用 .
这可能是由于JSON字段名称没有引号 .
从以下位置更改JSON结构:
至:
此函数基本上生成唯一的随机API密钥's and in case if it doesn' t然后弹出对话框,出现错误信息
In View Page:
From Controller:
可选的callback参数指定在load()方法完成时运行的回调函数 . 回调函数可以有不同的参数:
请求失败时要调用的函数 . 该函数接收三个参数:jqXHR(在jQuery 1.4.x中,XMLHttpRequest)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生) . 第二个参数的可能值(除了null)是"timeout","error","abort"和"parsererror" . 当发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如"Not Found"或"Internal Server Error."从jQuery 1.5开始,错误设置可以接受一系列函数 . 每个函数将依次调用 . 注意:不会为跨域脚本和跨域JSONP请求调用此处理程序 .
确保将
Response.StatusCode
设置为200以外的其他内容 . 使用Response.Write
编写例外消息,然后使用.....在你的JavaScript中 .
我相信Ajax响应处理程序使用HTTP状态代码来检查是否存在错误 .
因此,如果您只是在服务器端代码上抛出Java异常,但是HTTP响应没有500状态代码jQuery(或者在这种情况下可能是XMLHttpRequest对象)将只假设一切正常 .
我这样说是因为我在ASP.NET中遇到了类似的问题,我抛出的东西就像ArgumentException(“不知道该做什么......”),但错误处理程序没有触发 .
然后我将
Response.StatusCode
设置为500或200,无论我是否有错误 .ServerSide:
ClientSide:
Generic Ajax Error Handling
如果我需要为所有ajax请求做一些通用的错误处理 . 我将设置ajaxError处理程序并在名为errorcontainer的div上显示错误HTML内容的顶部 .
虽然问这个问题已经很多年了,但我仍然没有找到
xhr.responseText
作为我正在寻找的答案 . 它以下列格式返回给我:我绝对不想向用户展示 . 我正在寻找的是如下所示:
xhr.responseJSON.message
给了我来自Json对象的确切消息,可以向用户显示 .如果调用asp.net,这将返回错误消息 Headers :
我自己并没有编写所有的formatErrorMessage,但我发现它非常有用 .
如果有任何表格提交验证
只需使用其余的代码
... ... });
Controller:
View script:
您在xhr对象中有一个抛出异常的JSON对象 . 只是用
JSON对象公开了另外两个属性:'ExceptionType'和'StackTrace'