无法在AJAX错误处理程序中获取正确的状态代码

时间:2012-04-30 21:13:22

标签: asp.net jquery http-status-codes

我无法在AJAX请求的错误处理程序中获得正确的错误代码。每次发生错误时,它都会返回statusCode = 500.我尝试在我的服务中明确地将其设置为HttpContext.Current.Response.StatusCode = 403;,但它仍然给我status = 500。

这就是我的AJAX请求的样子:

$.ajax({
            type: "POST",
            url: "Services/someSvc.asmx/SomeMethod",
            cache: true,
            contentType: "application/json; charset=utf-8",
            data:"{}",
            dataType: "json"
            error: ajaxFailed
        });

        function ajaxFailed(xmlRequest) {
                alert(xmlRequest.status + ' \n\r ' + //This is always 500.
                xmlRequest.statusText + '\n\r' + 
                xmlRequest.responseText);
        }

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

看起来你几乎就在那里,这是一个示例[WebMethod],它会抛出一个StatusCode 403。

    [WebMethod]
    public static string HelloWorld(string name)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.StatusCode = 403;
        return null;
    }

这是调用jQuery代码。

    $(document).ready(function ()
    {
        var jsonRequest = { name: "Zach Hunter" };

        $.ajax({
            type: 'POST',
            url: 'Demo.aspx/HelloWorld',
            data: JSON.stringify(jsonRequest),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (data, text)
            {
                $('#results').html(data.d);
            },
            error: function (request, status, error)
            {
                $('#results').html('Status Code: ' + request.status);
            }
        });
    });

如果您没有返回方法签名中指定的值,则会返回状态代码500.

答案 1 :(得分:0)

根据the documentation

  

错误(jqXHR,textStatus,errorThrown)

     

请求失败时要调用的函数。该功能收到   三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,a   描述发生的错误类型的字符串和可选项   异常对象,如果发生了一个。第二个可能的值   参数(除了null)是“超时”,“错误”,“中止”和   “parsererror”。发生HTTP错误时,errorThrown会收到   HTTP状态的文本部分,例如“未找到”或“内部”   服务器错误。“从jQuery 1.5开始,错误设置可以接受一个数组   功能。每个函数将依次调用。注意:这个处理程序   没有调用跨域脚本和JSONP请求。这是个   Ajax事件。

所以将代码更改为更像这样的代码:

$.ajax({
    type: "POST",
    url: "Services/someSvc.asmx/SomeMethod",
    cache: true,
    contentType: "application/json; charset=utf-8",
    data:"{}",
    dataType: "json",
    error: ajaxFailed (jqXHR, textStatus, errorThrown)
}); 

function ajaxFailed(jqXHR, textStatus, errorThrown) {
    alert(errorThrown + ' \n\r ' + textStatusText);         
}

您可能还会找到this answer provides some additional信息。