11

jQuery.ajax呼び出しを使用してjavascriptを介してAPIを呼び出しています。ユーザーが認証されていない場合、APIは401で応答します。この呼び出しについてのみ、このエラーを無視します。

jQueryオプションで説明されているすべてのコールバックオプションを試しましたが、ブラウザコンソール(FirefoxとChromeの両方)にエラーが表示されます。

エラーをトリガーするサンプルコードは次のとおりです。

$.ajax({
    type: 'GET',
    url: '/url-with-auth',
    dataType: 'json',
    statusCode: {
        401: function (error) {
            // simply ignore this error
            console.log(error);
        }
    },
    complete: logall,
    error: function () {
        // simply ignore this error
        console.log(error);
    },
    async: false
}).fail(function () {
        // ignore the error and do nothing else
        console.log("$.get failed!");
    });

これには、ブラウザがユーザーが認証されていないと見なすため、.htaccessファイルで保護されているステージングマシンでユーザー資格情報を再度要求するという副作用もあります。したがって、次の要求では、ユーザーはhttp資格情報を再入力する必要があります。

このエラーを完全に無視する方法はありますか?

編集

現在、完全にキャッシュされたアプリケーション側のHTMLテンプレートがあり、パフォーマンス上の理由からこの動作を維持したいと考えています。レイアウトで変更されるのは現在のユーザーのログイン情報だけなので、ログインしていないユーザーのデフォルトのマークアップを使用して(キャッシュされた)ページをレンダリングし、jQueryを使用してマークアップの関連要素をajax呼び出しによって返されるログイン情報。したがって、ユーザーがログに記録されておらず、ajaxエンドポイントが401を返した場合、何も必要ありませんが、マークアップは同じままである必要があります。

現時点ではすべてが機能していますが、唯一の醜いことは、コンソールに401 javascriptエラーがあり、それを取り除きたいということです。

これが私が話しているメッセージのスクリーンショットです:

コンソールエラー

4

2 に答える 2

3

私もこの問題に遭遇し、JavaScript コンソールで HTTP 401 および 404 などのエラーの例外を抑制したいと考えました。私はこの質問を見つけましたが、error() および statusCode() ハンドラーが例外を静かにしなかった理由がわからなかったので、自分で掘り下げました。

私が知る限り、これはブラウザのネイティブ ajax XMLHttpRequest オブジェクトの問題であり、jQuery の問題ではありません。これを証明するために、次のテスト コードを使用しました。

function xhrTest(index) {
    var ajaxObjects = [
        $.ajaxSettings.xhr(), // what jquery returns
        new XMLHttpRequest()  // the native one in the browser
    ];
    var ajax = ajaxObjects[index];
    ajax.onreadystatechange = function() {console.log("xhrTest: state: " + ajax.readyState)};
    var errorHandler = function() {console.log("xhrTest: error");};
    ajax.onerror = errorHandler;
    ajax.onabort = errorHandler;
    ajax.open("GET", "/fileThatDoesNotExist", true);
    ajax.send();    
}

jQuery をバイパスする xhrTest(0) または xhrTest(1) を使用してこれを呼び出した場合 (私は JavaScript コンソールから実行しました)、結果は同じであることに注意してください。

jQueryを使っても使わなくても同じ結果

于 2013-03-14T18:58:21.880 に答える
-2

次のような非表示フィールドをページに追加できますか (動的に生成されると思います)。

<input type="hidden" name="isLoggedIn" value="true" (or false) />

次に、JavaScriptで、配置します

if ($('input[name=isLoggedIn"]').val() == "true")
{
     //your ajax call here
} 
于 2013-01-15T17:24:19.217 に答える