500状态代码后无法再次进行Ajax调用

时间:2015-12-02 10:42:26

标签: javascript jquery ajax asp.net-mvc http-status-codes

我通过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:处理它。

0 个答案:

没有答案