gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:05:33 24 4
gpt4 key购买 nike

我的问题的本质是这样的:如果我向服务器发出 $.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);
}
}

前一个示例假设我的服务器 Controller 有一个 try/catch,它会消耗任何服务器端异常。然后,它接受任何异常并将它们作为 json success 对象的一部分返回。后者允许服务器的异常冒泡并被 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
});
}

这与将 success 设置为 false 并将 error 属性设置为错误消息不同。

最佳答案

我在我的系统中做了一些非常相似的事情。成功总是返回如下数据:

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

而错误总是这样完成的:

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

您可以设置标志来查找 Controller catch() 语句中的异常代码,以过滤错误消息的类型。在你的 JS 代码中你只需这样做:

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

您可以更疯狂,通过将此代码添加到 $(document).ajaxComplete(); 回调中,将它们添加为全局 AJAX 处理程序。

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

关于jquery - 在 ajax 请求上接收服务器异常消息的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com