我的问题的本质是:如果我发出一个$ .ajax请求到我的服务器进行服务器端验证 - 我应该如何处理验证响应?我把自己当作有两个选项:在ajax请求上接收服务器异常消息的最佳做法
// Server handled error:
$.ajax({
url: 'controller/action',
data: {},
success: function(response){
console.log("Error:", response.error);
}
}
// Server unhandled error:
$.ajax({
url: 'controller/action',
data: {},
success: function(){
},
error: function(error){
console.log("Error:", error);
}
}
前者示例假设我的服务器的控制器具有一个try/catch消耗任何服务器端异常。然后它接受任何异常并将它们作为json成功对象的一部分返回。后者允许服务器的异常冒泡并通过ajax错误处理程序捕获。
就我个人而言,我认为我更喜欢后者。但是,我刚刚遇到了远程处理的问题 - 如果我们的服务器的安全设置没有放松,那么错误消息被隐藏为“运行时错误”,并且从ajax的onerror事件处理程序中读取错误信息变得不可能。
我想避免这个问题,我需要始终能够读取我的错误,但似乎真的错了有我的ajax请求总是返回成功。
这通常如何处理?
[HttpPost, AjaxOnly]
public ActionResult ChangePassword(ChangePasswordDialogModel model)
{
string error = string.Empty;
if (model.NewPassword == model.NewPasswordConfirm)
{
using (var service = new SecurityServicesSoapClient())
{
error = service.ChangePassword(SessionManager.Default.User.UserName, model.OldPassword,
model.NewPassword);
}
}
else
{
error = "New Password and Confirm do not match. Please re-enter";
}
if (!string.IsNullOrEmpty(error))
throw new Exception(error);
return Json(new
{
success = true
});
}
这与将成功设置为false并将错误属性设置为错误消息。
就我个人而言,我将客户端和服务器端代码视为单独的应用程序。前者只是访问后者的API。因此,我想确保服务器端应用程序(如任何应用程序)_never_具有未处理的异常。如果存在需要与客户通信的错误条件,则应该在该客户熟悉的结构中进行。在HTTP中,这将是错误代码和响应主体。 – David