ほとんどの場合に機能するかなり複雑な一連のスクリプトがあります。私がやりたいことは、AJAX リクエストを作成し、401 エラーが発生した場合に何かを行うことです。彼らが 401 を受け取ったら、認証のために送信してから、リクエストを再送信します。ajaxPrefilter に処理を追加すると、次のようになります。
jqXhr.then(function (response, status) {
var deferred = $.Deferred(),
data = response && response.d ? response.d : response,
result = data && _.isArray(data.results) ? data.results : data;
deferred.resolveWith(this, [result, status, jqXhr, response]);
return deferred;
},
function (response, status, error) {
var secondPromise = $.Deferred();
if (response.status == 401) {
// handle authentication
// resend request
// depending on outcome, resolve or reject secondPromise
} else {
// not authentication issue, just reject the secondPromise
}
return secondPromise;
}).promise(jqXhr);
基本的に、「then」の最初の部分は、遅延オブジェクトを解決して送り返すだけです (そのため、呼び出しを待っている人は誰でもすぐに取得できます)。2 番目の部分 (エラー) は、エラー コード 401 (認証が必要) をチェックします。401 の場合は、認証し、リクエストを再送信して、結果を処理します。401 でない場合は、スローして拒否します。
問題は、エラー関数の応答、ステータス、エラー引数が常に次のようになることです。
response = state 0、status 0、statusText が「error」、応答テキストがない遅延オブジェクト。ステータス = 「エラー」 エラー = 「」
エラーを検出するために欠けている方法はありますか? firebug の net タブと Fiddler で、応答コードが明らかに 401 であることを明確に確認できます。
これに関するアイデアはありますか?