2013-05-10 13 views
28

Wiem, jak odebrać dane serwera lub błąd. Jest wiele sposobów. Na przykład:Zapobieganie nieobsługiwanemu jQuery Błąd AJAX

$.ajax({ 
    type: "get", 
    url: "/widgets/", 
    success: function (data, text) { 
     console.log('this is a data'); 
    }, 
    error: function (request, status, error) { 
     console.log('this is an error'); 
    } 
}); 

Proszę zobaczyć ten obraz:

result in chrome developer console

Mam funkcji błędu i robię to, co muszę tam. Jak zapobiec błędom w pierwszym wierszu. Testowałem błędy 4x i 5xx, ale bez różnicy. Wiem, że ten użytkownik końcowy nie widzi tego błędu, gdy konsola programisty jest ukryta.

Potrzebuję tego do zaprojektowania interfejsu API. Wiem, że mogę wysłać 200 odpowiedzi z serwera z dodatkowym argumentem, który pokazuje, że jest to błąd lub wynik sukcesu.

Ale jeśli mogę wysłać 4xx lub 5xx odpowiedzi, to nie ma potrzeby dodatkowego argumentu. Ten sposób ma dla mnie dodatkowe korzyści. Na przykład mogę zastosować wynik sukcesu do moich modeli po stronie klienta bez obawy o dodatkowe argumenty.

Dziękuję

+0

jQuery 1.9.1.js: 8526 '// To może spowodować wyjątek, który jest actually' ' // traktowane jQuery.ajax (tak nie try/catch tutaj) '' xhr.send ((s.hasContent && s.data) || null); ' – iman

+4

Zawijanie' xhr.send' w 'try/catch' nie ** nie ** zapobiega wyświetlaniu błędu w konsoli programisty. Zauważ, że są to * nie * błędy/wyjątki JS, ale są związane z * żądaniem * wysyłanym przez przeglądarkę, więc próba złapania błędu JS nie zadziała. – gkalpak

+0

Wypróbuj tę odpowiedź: http://stackoverflow.com/questions/7436195/disabling-some-jquery-global-ajax-event-handlers-for-a-request – JVE999

Odpowiedz

12

AFAIK nie można dokonać czerwone thingies odejść, po powrocie error kody (4xx, 5xx). Są używane przez przeglądarkę do wskazania, że ​​coś mogło nie pójść zgodnie z oczekiwaniami. Nadal są to jedynie ozdoby, ponieważ kody statusu 4xx i 5xx są całkowicie poprawne, więc nie widzę powodu, dla którego chciałbyś je wyeliminować.

Jak sam powiedziałeś, twoją drugą alternatywą byłoby wysłanie "200 odpowiedzi z serwera z dodatkowym argumentem, który pokazuje, że jest to błąd lub wynik sukcesu".

Z pewnością polecam używanie kodów 4xx i 5xx (do tego są przeznaczone) i przestańcie martwić się ostrzeżeniami heads-up w przeglądarce w konsoli programisty (również w języku czerwonym).

Zobacz także this i this pytania odnoszące się do podobnych błędów podczas pobierania innych rodzajów zasobów (obrazy, pliki itp.). Błędy, które widzisz, mają w rzeczywistości taki sam charakter.

+2

Jest przypadek, gdyby dobrze byłoby uniknąć zgłaszania z tych błędów: Testowanie (szczególnie bezgłowe testowanie aplikacji internetowych). Na przykład, piszesz test (np. Z mocha-phantonJS) dla nieudanego żądania ajax. Jest denerwujące, gdy wszystkie te błędy pojawiają się w podsumowaniu testów. – emepyc

+0

Mam sprawdzić, czy strona istnieje, a czerwony błąd sprawia, że ​​wygląda na coś poszło nie tak, więc byłoby miło tłumić. – JVE999

+1

@ JVE999: Moja odpowiedź jest ważna. Nie bądź "czerwonopodobnym fobią"! 4xx i 5xx są poprawnymi kodami i nie można nic zrobić, jak przeglądarka zdecyduje się je zarejestrować (nie należy się tym martwić).Jeśli jesteś zbyt zaniepokojony otwieraniem konsoli przez użytkownika i błędnym ocenianiem twojej aplikacji ze względu na czerwone rzeczy, może mógłbyś zareagować na wiadomość, aby to wyjaśnić i dać znać jej oczekiwanemu zachowaniu. – gkalpak