0

jQuery.ajaxPrefilter()の説明によると、リクエストが に送信される前に起動されるはず$.ajax()ですが、私のプロジェクトで見たところ、サーバー API エンドポイントが最初に呼び出され、次にそのajaxPrefilter時点で関数が呼び出されます。変更を加えるには遅すぎます。

私はおそらくここで何かを見逃していますが、私はそれを見ません...

私の登録は次のようになります。

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    if (options.url.startsWith('api') || options.url.startsWith('/api')) {

        if (options.headers === undefined) {
            options.headers = {};
        }

        if (!options.headers.Authorization) {
            var jwt = sessionStorage.getItem('accessToken');
            jqXHR.setRequestHeader('Authorization', 'Bearer ' + jwt);
        }
    }
});

ヘッダーの設定に使用できることは十分に認識してbeforeSendいますが、最初にヘッダーが存在するかどうかを確認し、存在しない場合は追加して、送信前にリクエストヘッダーを読み取る唯一の方法はajaxPrefilter私が理解する限り使用することによってのみ。

を使用することになるかもしれませbeforeSendんが、ドキュメントに記載されているように機能しないのはなぜでしょうか? たぶん、私はこれがどのように機能するかを完全に理解していません...

jQuery バージョン 3.3.1 を使用しています。

編集:

設定async: falseすると問題が解決するようですが、それはjQueryのバグのように見えます。

編集2:

上記のコードが機能するようになったため、どこかにバグがあった可能性があると思います。私のgitの変更を見てもまったく明らかではないため、このバグがどこにあったのかわかりませんが、今のところ機能しています...

4

1 に答える 1