AJAX错误作为Success返回。如何从ASP.NET MVC返回JSON错误?你能告诉我我做错了什么吗?谢谢。
[HttpPost]
public JsonResult Register(int EventID)
{
try
{
// code
return Json(new { success = true, message = "Thank you for registering!" });
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message });
}
}
$.ajax({
url: "@Url.Action("Register", "Home")",
type: "post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(postData),
success: function(data) {
},
error: function (data) {
}
});
答案 0 :(得分:2)
仅当HTTP响应代码不是error
时才会执行HTTP 200 Ready
函数。您在服务器端处理错误并返回正确的响应,这将由AJAX调用中的success
函数获取。相反,在JSON中使用status
变量并在客户端处理它:
success: function(data) {
if (typeof data == "string")
data = JSON.parse(data);
if (data.success) {
// Code if success.
} else {
// Code if error.
}
},
从docs(向下滚动到error
部分):
请求失败时要调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数(
null
除外)的可能值为"timeout"
,"error"
,"abort"
和"parsererror"
。发生HTTP错误时,errorThrown
会收到HTTP状态的文本部分,例如“未找到”或“内部服务器错误”。 从jQuery 1.5 开始,error
设置可以接受一系列函数。每个函数将依次调用。 注意: 不会为跨域脚本和跨域JSONP请求调用此处理程序。这是Ajax Event。
答案 1 :(得分:2)
仅当在服务器端出现黄色屏幕错误时才会出现Ajax 错误方法。在您的方案中,您使用try catch处理错误并返回有效响应。因此,这不被视为错误,而是有效的响应。 删除try catch 以便Ajax将选择错误事件,否则如果要显示来自服务器的实际错误消息,则可以使用success
属性来决定是否答案是成功或错误,它与Praveen在答案中已经发布的内容类似。
success: function(data) {
if (data.success) { //as you are passing true/false from server side.
// Code if success.
} else {
// Code if error.
}
},