0

私は目立たない ajax を使用しており、カスタム認証タグに到達するとステータス コードが設定され、json データの準備が整いましたが、情報を返すときにステータス コードがコンソールに表示され、たとえば「読み込みに失敗しました」と表示されます。リソース: サーバーは 403 (禁止) のステータスで応答しました。」onfailure ajax オプションにアラートを配置しましたが、そこでは何も発生しません。statuscode エラーを ajax 呼び出しの失敗と見なしていないようです。onFailure ajax オプションでステータス コード エラーを処理するにはどうすればよいですか?

                    if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    var urlHelper = new UrlHelper(filterContext.RequestContext);
                    filterContext.HttpContext.Response.StatusCode = 403;
                    filterContext.Result = new JsonResult()
                    {
                        Data = new
                        {
                            Error = "NotAuthorized",
                            LogOnUrl = urlHelper.Action("AccessDenied", "Error", new { area=""})
                        },
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet
                    };
                }

これは私のカスタム承認属性にあります。

@Ajax.ActionLink("Company", "Company", "Admin", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "centerAdmin", HttpMethod = "POST", OnComplete = "Oncomplete", OnSuccess = "OnSuccess", OnFailure = "OnFailure" })

私のAjaxの目立たない呼び出し

<script>

function OnSuccess(ajaxContext)
{
    alert("dfgsdfgsdfgsdfgfdgsdfgddf");
}
function OnFailure(ajaxContext) {
    alert("dfgsdfsdfgdfgsgsdf");
}
function Oncomplete(ajaxContext) {
    alert("dfgsddfffffffffffffffffffffgsdf");
}

これらのイベントのいずれかが発生したかどうかを確認するための単純なアラート。

4

2 に答える 2

0

あなたはおそらく、私があなたの質問にさらに多くの質問をして答えるのにうんざりしているので、ここで何か試してみてください. 少なくとも OnFailure ハンドラーに分類されるはずです。Result を json オブジェクトに設定する代わりに、HttpStatusCodeResult に設定します。

filterContext.Result = new HttpStatusCodeResult((int)HttpStatusCode.Forbidden, "You are not authorized to access this page!"); // Set whatever status code is appropriate.

ログオン URL またはその他の json パラメーターを渡すことについてはわかりませんが、これを開始する必要があります。レスポンスのステータスコードを設定する必要はないと思います。

于 2014-04-07T18:42:32.080 に答える
0
$(function () {
$(document).ajaxError(function (e, xhr) {
    debugger;
    if (xhr.status == 403) {
        alert("403");
    }
    alert("not 403");
});

});

少し調べたところ、今のところ問題を解決しているように見えるこのコードスニペットに出会いました。

于 2014-04-07T19:23:18.000 に答える