1

我无法在 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);
        }

我在这里想念什么?

4

2 回答 2

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。

于 2012-04-30T22:30:20.823 回答
0

根据文档

错误(jqXHR,textStatus,errorThrown)

请求失败时调用的函数。该函数接收三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象,一个描述发生的错误类型的字符串和一个可选的异常对象(如果发生)。第二个参数(除了 null)的可能值是“timeout”、“error”、“abort”和“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);         
}

您可能还会发现此答案提供了一些附加信息。

于 2012-04-30T21:20:56.687 回答