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

前端之家收集整理的这篇文章主要介绍了jquery – 在ajax请求上接收服务器异常消息的最佳实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我的问题的实质是:如果我向服务器发出$.ajax请求以进行服务器端验证 – 我应该如何处理验证响应?我认为自己有两种选择:@H_404_2@

@H_404_2@

  1. // Server handled error:
  2. $.ajax({
  3. url: 'controller/action',data: {},success: function(response){
  4. console.log("Error:",response.error);
  5. }
  6. }
  7. // Server unhandled error:
  8. $.ajax({
  9. url: 'controller/action',success: function(){
  10. },error: function(error){
  11. console.log("Error:",error);
  12. }
  13. }

前一个示例假设我的服务器控制器有一个try / catch,它消耗任何服务器端异常.然后它接受任何异常并将它们作为json成功对象的一部分返回.后者允许服务器的异常冒泡并在ajax错误处理程序中捕获.@H_404_2@

我个人认为我更喜欢后者.但是,我刚刚遇到远程问题 – 如果我们的服务器的安全设置没有放松,那么错误消息会被隐藏为’运行时错误’,并且从ajax的onerror事件处理程序中读取错误信息变得不可能.@H_404_2@

我想避免这个问题,我需要始终能够读取我的错误,但让我的ajax请求始终返回成功似乎是错误的.@H_404_2@

这通常如何处理?@H_404_2@

@H_404_2@

  1. [HttpPost,AjaxOnly]
  2. public ActionResult ChangePassword(ChangePasswordDialogModel model)
  3. {
  4. string error = string.Empty;
  5. if (model.NewPassword == model.NewPasswordConfirm)
  6. {
  7. using (var service = new SecurityServicesSoapClient())
  8. {
  9. error = service.ChangePassword(SessionManager.Default.User.UserName,model.OldPassword,model.NewPassword);
  10. }
  11. }
  12. else
  13. {
  14. error = "New Password and Confirm do not match. Please re-enter";
  15. }
  16. if (!string.IsNullOrEmpty(error))
  17. throw new Exception(error);
  18. return Json(new
  19. {
  20. success = true
  21. });
  22. }

这与将成功设置为false并将错误属性设置为错误消息相对.

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

@H_404_2@

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

错误总是如下:@H_404_2@

@H_404_2@

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

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

@H_404_2@

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

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

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

猜你在找的jQuery相关文章