使用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
导致statusText
和errorThrown
未定义。我可以访问包含构成标准.net错误页面的HTML的XMLHttpRequest.responseText
。
我在responseText
中找到了页面标题,并使用标题来确定抛出了哪个错误。虽然我怀疑当我启用自定义错误处理页面时会出现这种情况。
我应该在ashx
中抛出错误,还是应该返回状态代码作为调用userCreation.ashx
返回的数据的一部分,然后使用它来决定要采取的操作?你是如何处理这些情况的?
答案 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"
。)