2

我对 Ajax 和 ASP.NET MVC 非常陌生。我有一个返回 AJAX 的函数,我需要处理错误情况。当一切正常时,代码就可以了。我的问题是如何处理错误部分。这是我所拥有的:

为了返回成功,我有:

var data = new { success = false };

return Json(data, JsonRequestBehavior.AllowGet);

而且我需要知道当出现异常或错误时要返回什么?

这是我的查询:

function DoMailPDF() {
             $("#submitMail").attr("disabled", true);
             var personid = $("#personid").val();
             var unitid = $("#unitid").val();
             var url = "@(Url.Action("SendEmail", "Report"))";
            $.ajax({
                url: url,
                data: { person: personid , unit:unitid},
                success: function () {                    
               // $('input[name=MailSent]').attr('checked', true);
                $("#submitMail").removeAttr("disabled");
                    alert("Email sent!");
                },
                error: function () {                    
                 alert("Email not sent!");
                }
            });
        }

它永远不会涉及错误函数。我如何让它去错误?欢迎任何提示和建议。

4

2 回答 2

5

您可以通过以下方式访问您的 json 响应对象:

       $.ajax({
            url: url,
            data: { person: personid , unit:unitid},
            dataType: 'json',
            success: function (response) {                    
                if (response.success == false) {
                    // Error handling
                } else {
                    // Success handling
                }
            },
            error: function () {                    
             alert("Email not sent!");
            }
        });
于 2012-06-13T13:50:53.993 回答
2

正如 Nick Bork 已经在评论中解释的那样,响应的错误/成功状态由在标头中向下发送的 Http 状态代码确定。您仍然可以采用建议的方式并检查响应对象和成功属性,但当您已经拥有更强大且经过长期验证的机制(HTTP 协议本身)时,这显然不是正确的方式。

当一切都按照代码进行时,.NET 将使用 HTTP 200(OK),但是您可以通过访问这样的 Reponse 对象来更改控制器中的此行为,例如:

Response.StatusCode = 500; // or any of the other HTTP "failure" status codes

4xx 或 5xx 类别中的任何状态代码都将触发调用error()中指定的处理程序$.ajax(...)。当然,您还可以从那里检查正确的状态代码、响应详细信息和 XHR 对象的每个属性,以提供更有意义的用户体验。

HTTP 状态代码几乎是一成不变的,不太可能改变,这就是为什么我认为它们绝对比定制解决方案更可取......

PS:对于 HTTP 状态代码的列表,维基百科是你的朋友。

于 2012-06-13T13:50:39.330 回答