12

私は以下を使用して、不正アクセスをキャッチし、ログインを強制します。

$.ajaxSetup({
    statusCode: {
        401: function(){
            //do stuff
        }
    }
});

サーバー(ドメイン)上のリソースにアクセスするときはうまく機能しますが、現在、ajax呼び出しを介してサードパーティのAPIリソースを使用しようとしていますが、それらの401もこれによってキャッチされます。だから、私はどのように私がすることができますか?

  1. 上記のコードを書き直して、私のドメインから401をキャッチするか、
  2. 上記のコードを除いて$.ajax()呼び出しを行います(別のエラーハンドラーを使用します)

どうもありがとう!

4

3 に答える 3

14

実験を通して、私は答えを発見しました。$ .ajaxSetup()は基本的に、$。ajax()リクエストのデフォルトを設定します。ただし、次のように、特定の要求に対してグローバル設定をオーバーライドできます。

$.ajaxSetup({
    statusCode: {
        401: function(){
            //this will catch any and all access denied errors
        }
    }
});

$.ajax({
    type: 'GET',
    dataType: 'json',
    url: someresouceurl,
    statusCode: {
        401: function(){
            //except this one!
        }
    },
    success: function(data) {
    }
});
于 2012-07-12T13:41:23.613 に答える
1

@MrOBrianの回答を拡張すると、401関数でthis、AJAXリクエストに関する情報を含む設定オブジェクトに設定されます。プロパティの1つはですurl。これを読んで、自分のURLかどうかを確認できます。

$.ajaxSetup({
    statusCode: {
        401: function(){
            var url = this.url;
            if(url === myurl){ // check if url is yours
            }
            else{
                // not your URL, do nothing
                return;
            }
        }
    }
});
于 2012-07-12T14:03:57.723 に答える
0

jQueryAPIから

If the request is successful, the status code functions take the same parameters as the success callback; if it results in an error, they take the same parameters as the error callback.

取得したjqXHRパラメーターを調べて、ドメインだけに絞り込むことができるかどうかを確認することをお勧めしますが、正確なコードを提供するためのjQueryのその側面については十分にわかりません。

于 2012-07-11T20:26:22.413 に答える