4

让我们假设我的 httphandler (.ashx) 中有以下方法:

private void Foo()
{
    try
    {
        throw new Exception("blah");
    }
    catch(Exception e)
    {
        HttpContext.Current.Response.Write(
            serializer.Serialize(new AjaxError(e)));
    }
}

[Serializable]
public class AjaxError
{
    public string Message { get; set; }
    public string InnerException { get; set; }
    public string StackTrace { get; set; }

    public AjaxError(Exception e)
    {
        if (e != null)
        {
            this.Message = e.Message;
            this.StackTrace = e.StackTrace;
            this.InnerException = e.InnerException != null ? 
                e.InnerException.Message : null;


            HttpContext.Current.Response.StatusDescription = "CustomError";
        }

    }
}

当我$.ajax()调用该方法时,我将在success回调中结束,无论后端是否出现问题,我最终都会进入catch块中。

我对 ajax 方法进行了一些扩展以规范错误处理,因此无论是“jquery”错误(解析错误等)还是我的自定义错误,我都会在错误回调中结束。

现在,我想知道的是,我应该添加类似

HttpContext.Current.Response.StatusCode = 500;

最终出现在 jQuerys 错误处理程序中,或者我应该处理我的

HttpContext.Current.Response.StatusDescription = "CustomError";

在 jqXHR 对象上,并假设它在那里出现错误?

如果有不清楚的地方,请告诉我。

4

1 回答 1

0

您至少需要使用状态码,因为这样您的 $.ajax 可以像这样实现失败函数:

$.ajax({...})
    .fail(function(xhr) {
        console.log(xhr.statusText); // the status text
        console.log(xhr.statusCode); // the status code
    });

如果您只想将文本直接发送给用户,您可以使用 statusText。如果需要,您还可以为不同的错误执行不同的状态代码(即使状态代码不是常规的),如下所示:

$.ajax({...})
    .fail(function(xhr) {
        switch(xhr.statusCode) {
            case 401:
                // ... do something
                break;
            case 402:
                // ... do something
                break;
            case 403:
                // ... do something
                break;
        }
    });
于 2013-05-28T15:17:12.680 回答