Se débarrasser d'une erreur 401 (non autorisée) ajax dans la console du navigateur

j'appelle une api par javascript en utilisant un jQuery.ajax appel. L'api de répondre avec 401 si l'utilisateur n'est pas authentifié et je veux ignorer cette erreur uniquement pour cet appel.

j'ai essayé toutes les options de rappel décrites dans les options jQuery mais l'erreur apparaît toujours dans la console du navigateur (à la fois dans Firefox et Chrome).

Voici un exemple de code qui provoquent l'erreur:

$.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!");
    });

cela a aussi l'effet secondaire de demander à nouveau les informations d'identification de l'utilisateur sur une machine de staging qui est protégée par un .htaccess fichier puisque le navigateur pense que l'utilisateur n'est pas authentifié, de sorte que dans les demandes suivantes l'Utilisateur a besoin de rentrer ses références http.

Est-il possible d'ignorer complètement cette erreur?

Modifier

actuellement, j'ai un modèle HTML qui est entièrement mis en cache côté application et je veux garder ce comportement pour des raisons de performance. La seule partie qui les modifications dans la mise en page sont les informations de connexion pour l'utilisateur courant, donc je vais rendre la page (en cache) avec le markup par défaut pour les utilisateurs non connectés et puis en utilisant jQuery je remplace les éléments pertinents du markup par les informations de connexion retournées par un appel ajax. Donc, si l'utilisateur n'est pas connecté et que le paramètre ajax retourne 401, Je n'ai besoin de rien, le balisage doit rester le même.

Tout fonctionne en ce moment, la seule chose laide est que j'ai ce 401 erreur javascript dans la console et j'aimerais m'en débarrasser.

Voici une capture d'écran du message que je parle:

console error

11
demandé sur Fabio 2013-01-15 16:37:42

2 réponses

j'ai aussi rencontré ce problème et j'ai voulu surpasser l'exception dans la console JavaScript pour les erreurs HTTP 401 et 404 etc. J'ai trouvé cette question et je n'ai pas vu pourquoi les handlers error() et statusCode() n'ont pas calmé l'exception donc j'ai fait mes propres recherches dedans.

autant que je puisse dire, il s'avère que c'est un problème avec l'objet natif ajax XMLHttpRequest dans le navigateur, pas avec jQuery. Pour le prouver, j'ai utilisé le code de test suivant:

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();    
}

Note qu'en appelant ceci (je l'ai fait à partir de la console JavaScript) avec xhrtest(0) ou xhrTest(1), qui contourne jQuery, que les résultats sont les mêmes:

same results whether jQuery is used or not

3
répondu Vasil Daskalopoulos 2013-03-14 18:58:21

pouvez-vous ajouter un champ caché sur la page (je devine qu'il est généré dynamiquement) comme:

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

puis dans votre javascript, placez

if ($('input[name=isLoggedIn"]').val() == "true")
{
     //your ajax call here
} 
-1
répondu allanx2000 2013-01-15 17:24:19