使用jQuery.ajax()时如何处理错误?

时间:2015-09-29 09:30:26

标签: jquery asp.net ajax

使用jQuery的AJAX方法提交表单数据时,处理错误的最佳方法是什么?这是一个调用可能的示例:

$.ajax({
    url: "userCreation.ashx",
    data: { u:userName, p:password, e:email },
    type: "POST",
    beforeSend: function(){disableSubmitButton();},
    complete: function(){enableSubmitButton();},
    error: function(xhr, statusText, errorThrown){
            // Work out what the error was and display the appropriate message
        },
    success: function(data){
            displayUserCreatedMessage();
            refreshUserList();
        }
});

请求可能由于多种原因而失败,例如重复的用户名,重复的电子邮件地址等,并且ashx被写入以在发生这种情况时抛出异常。

我的问题似乎是,通过抛出异常导致ashx导致statusTexterrorThrown未定义。我可以访问包含构成标准.net错误页面的HTML的XMLHttpRequest.responseText

我在responseText中找到了页面标题,并使用标题来确定抛出了哪个错误。虽然我怀疑当我启用自定义错误处理页面时会出现这种情况。

我应该在ashx中抛出错误,还是应该返回状态代码作为调用userCreation.ashx返回的数据的一部分,然后使用它来决定要采取的操作?你是如何处理这些情况的?

2 个答案:

答案 0 :(得分:1)

确保您将Response.StatusCode设置为200以外的其他内容。使用Response.Write编写您的例外邮件,然后使用...

xhr.responseText

在你的javascript / ajax中我希望这项工作。

答案 1 :(得分:0)

如果服务器没有做某事,那么请它做,那么服务器在消息中返回错误代码更有意义。

例如,尝试使用现有用户名创建新用户可能会返回错误,例如:

  

409冲突:用户存在

当服务器返回200到299或304(即未修改)以外的HTTP代码时,将调用您的error()回调。在这种情况下,textStatus应设置为error

可以查看HTTP错误代码,查看status字段,如下所示:

if(jqxhr.status == 409)
{
    // got a conflict (i.e. same username)
    ...
}

正如您在回答中提到的,jqxhr.responseText将包含错误消息(我上面的示例中为"Conflict: User Exists"。)