1

AJAX リクエストのエラー ハンドラで正しいエラー コードを取得できません。エラーが発生するたびに、statusCode = 500 が返されます。サービスで明示的に設定しようとしましたHttpContext.Current.Response.StatusCode = 403;が、それでもステータス = 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

あなたはほとんどそこにいたように見えます.StatusCode 403をスローする[WebMethod]の例を次に示します.

    [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)

リクエストが失敗した場合に呼び出される関数。関数は 3 つの引数を受け取ります。jqXHR (jQuery 1.4.x では XMLHttpRequest) オブジェクト、発生したエラーの種類を説明する文字列、およびオプションの例外オブジェクト (発生した場合) です。2 番目の引数 (null 以外) に指定できる値は、"timeout"、"error"、"abort"、および "parsererror" です。HTTP エラーが発生すると、errorThrown は「Not Found」や「Internal Server Error」などの 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 に答える