2013-01-15 16 views
11

Wywołuję api przez javascript za pomocą wywołania jQuery.ajax. Interfejs API reaguje na 401, jeśli użytkownik nie jest uwierzytelniony i chcę zignorować ten błąd tylko w przypadku tego połączenia.Pozbyć się błędu 401 (nieautoryzowany) ajax w konsoli przeglądarki

Próbowałem wszystkich opcji oddzwaniania opisanych w opcjach jQuery, ale błąd nadal wyskakuje w konsoli przeglądarki (zarówno w przeglądarce Firefox, jak i Chrome).

Oto przykładowy kod, który wywoła błąd:

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

Ma to również efekt uboczny zainteresowanie ponownie poświadczenia użytkownika na maszynie pomostowego, który jest chroniony przez plik .htaccess, ponieważ uważa, że ​​przeglądarka użytkownik nie jest uwierzytelniony, więc w kolejnych żądaniach użytkownik musi ponownie wprowadzić swoje poświadczenia http.

Czy istnieje sposób całkowitego zignorowania tego błędu?

Edit

Obecnie mam szablon HTML, który jest w całości z pamięci podręcznej po stronie aplikacji i chcę zachować to zachowanie ze względów wydajnościowych. Jedyną częścią, która zmienia układ, są informacje logowania dla bieżącego użytkownika, więc renderuję stronę (buforowaną) z domyślnym znacznikiem dla niezalogowanych użytkowników, a następnie za pomocą jQuery zastępuję odpowiednie elementy znaczników informacje logowania zwrócone przez wywołanie ajax. Więc jeśli użytkownik nie jest zalogowany, a punkt końcowy ajax zwraca 401, nic nie potrzebuję, znacznik powinien pozostać taki sam.

Wszystko działa w tej chwili, jedyną paskudną rzeczą jest to, że mam błąd 401 javascript w konsoli i chciałbym się go pozbyć.

Oto zrzut ekranu z komunikatem mówię:

console error

+0

można spojrzeć na http://stackoverflow.com/questions/10267683/jquery-ajax-handle-401-unauthorized –

+0

@RachelGallen już to zrobił i starał tam wszelkie sugestie, procedura obsługi jest wykonywana, ale błąd jest nadal wyświetlany.Chciałbym tego całkowicie uniknąć, ponieważ w tym przypadku skrypt ma na celu dodanie elementu dom tylko wtedy, gdy użytkownik jest zalogowany, a jeśli nie, chcę po prostu zignorować połączenie. – Fabio

+0

hmm, no cóż, mam nadzieję, że wkrótce znajdziesz odpowiedź. –

Odpowiedz

-1

można dodać pole ukryte na stronie (zgaduję jego generowane dynamicznie), takich jak:

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

Następnie w was javaScript, umieść

if ($('input[name=isLoggedIn"]').val() == "true") 
{ 
    //your ajax call here 
} 
+0

Szczerze mówiąc, większość użytkowników nie patrzy na konsolę. Jedyny powód, dla którego korzystam z konsoli to dla rozwoju lub jeśli strona działa dziwnie – allanx2000

+0

Wiem, jak napisać kod warunkowy ;-) Głównym wymaganiem jest nie zmieniać html dla zalogowanych użytkowników, aby szablon był w pełni buforowany. Ten kod łamie to wymaganie. – Fabio

+0

Czy jest coś na stronie, które wskazuje, że użytkownik jest zalogowany? użyj jquery do sprawdzenia wartości elementu w miejsce isLoggedIn – allanx2000

3

ja również prowadził w tym wydaniu i chciałem wyłączyć wyjątek w konsoli JavaScript dla błędów HTTP 401 i 404 itd. Znalazłem to pytanie i nie rozumiałem, dlaczego procedury obsługi błędów() i statusCode() nie wyciszyły wyjątku, więc zrobiłem to samo.

O ile widzę, okazuje się, że jest to problem z natywnym obiektem ajax XMLHttpRequest w przeglądarce, a nie z jQuery. Aby to udowodnić, że używany następujący kod testowy:

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

Zauważ, że gdy dzwoni ten (zrobiłem to z konsoli JavaScript) albo z xhrTest (0) lub xhrTest (1), która omija jQuery, że wyniki są takie same:

same results whether jQuery is used or not

Powiązane problemy