jquery – 在ajax请求上接收服务器异常消息的最佳实践

前端之家收集整理的这篇文章主要介绍了jquery – 在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',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并将错误属性设置为错误消息相对.

最佳答案
我在我的系统中做了类似的事情.成功总是返回如下数据:

$data['success'] = array(/* your data to be served back to the page */); //PHP

错误总是如下:

$data['errors'] = array(/* your error data */); //PHP

您可以设置标志以在控制器catch()语句中查找异常代码,以过滤错误消息的类型.在您的JS代码中,您只需:

// JS
$.ajax({success:function(data) {
    if (data.success !== undefined) {}
    else if (data.errors !== undefined) {}
}});

你可以变得更疯狂,并将它们添加为全局AJAX处理程序,并将此代码添加到$(document).ajaxComplete();打回来.

您可以并且应该为ajax错误回调设置单独的处理程序,因为这可能包括控制器代码无法控制的情况(404错误,服务器无法访问等).

猜你在找的jQuery相关文章