我通过MVC5
进行的Ajax调用在onclick event
网站中进行 SignUp 和 SignIn 。我有一个常规错误处理机制,我从Exceptions
抛出Controllers
并使用覆盖BaseController
方法在我的OnException
中处理它们,大致如下:
protected override void OnException(ExceptionContext filterContext)
{
HandleUnhandledException(filterContext.Exception);
if (Request.IsAjaxRequest())
{
var response = new EmptyResponse()
{
Error = new WebError(filterContext.Exception),
HasError = true,
};
filterContext.Result = Json(response, JsonRequestBehavior.AllowGet);
}
filterContext.ExceptionHandled = true;
base.OnException(filterContext);
}
然后我在客户端使用常规的ajax错误处理程序处理异常消息,以便向用户显示响应消息。
这就像:
$(document).ajaxError(function (evt, xhr) {
try {
var response = $.parseJSON(xhr.responseText);
error.checkResponse(response);
} catch (e) {
console.log('Why you no parse?' + xhr);
}
});
我在我的onclick事件中执行ajax调用,如下所示:
signupClick: function () {
$("#sign-up-submit").click(function (e) {
var control = base.dataValidation("#signup", e);
if (control) {
return false;
}
$.ajax({
url: ('/Home/SignUp'),
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: "json",
cache: false,
data: JSON.stringify(formData),
async: true,
success: function (data) {
// show success message
},
error: function (xhr, ajaxOptions, thrownError) {
},
});
});
},
问题:
我们说 SignUp 期间有 500 响应。当我尝试再次使用不同的输入执行 SignUp 时,按钮的onclick事件在我调试时甚至没有命中。但其他按钮和其他javascript绑定上的其他onclick events
有效。为什么会发生这种情况,我该如何克服这个问题呢?返回 500 是一种不良做法吗?
更新
我在返回之前更新了OnException
代码以包含Response.StatusCode = 200;
。问题是,当我从服务器端返回200时,success:
部分$.ajax
被调用。我想从error:
处理它。