Dodałem dzienniki do konsoli, aby sprawdzić status różnych zmiennych bez korzystania z debugera Firefox.
Jednak w wielu miejscach, w których mogę dodać console.log
w moim main.js
pliku, pojawia się następujący błąd zamiast moich uroczych odręcznych wiadomości do siebie:
Synchroniczne XMLHttpRequest w głównym wątku jest przestarzałe ze względu na jego szkodliwy wpływ na doświadczenie użytkownika końcowego. Aby uzyskać więcej pomocy http://xhr.spec.whatwg.org/
Jakie alternatywy lub opakowania console.log
mogę dodać do mojego kodu, które nie spowodują tego błędu?
Czy „robię to źle”?
jquery
debugging
firefox
backbone.js
console.log
Nathan Basanese
źródło
źródło
<script>$.ajaxPrefilter(function( options, originalOptions, jqXHR ) { options.async = true; });</script>
spowoduje to usunięcie ostrzeżenia. Możesz zobaczyć tutaj ten sam problem.Odpowiedzi:
Zdarzyło mi się to, gdy byłem leniwy i włączyłem tag skryptu jako część zwracanej treści. Takie jak:
Częściowa treść HTML:
Wydaje się, przynajmniej w moim przypadku, że jeśli zwrócisz taką treść HTML przez xhr, spowoduje to, że jQuery wykona wywołanie, aby uzyskać ten skrypt. To wywołanie następuje z flagą asynchroniczną false, ponieważ zakłada, że potrzebujesz skryptu, aby kontynuować ładowanie.
W sytuacjach takich jak ten lepiej byłoby ci lepiej spojrzeć na jakąś strukturę wiążącą i po prostu zwrócić obiekt JSON, lub w zależności od twojego backendu i szablonów możesz zmienić sposób wczytywania skryptów.
Możesz także użyć jQuery's,
getScript()
aby pobrać odpowiednie skrypty. Oto skrzypce, to tylko prosta kopia przykładu jQuery, ale nie widzę żadnych ostrzeżeń, gdy skrypty są ładowane w ten sposób.Przykład
http://jsfiddle.net/49tkL0qd/
źródło
<script>
jak powiedziałeś w wywołaniu zwrotnym asynchronicznego wywołania ajax. Moje ajax wywołanie jest asynchroniczna jednak w zwrotnego robię$('#object').html(data)
, gdy dane jest kawałekhtml
z<script>
a gdy linia ta jest wykonywana w której wyświetla się błąd wjs console
. +1 !!! dzięki:)
.Komunikat ostrzegawczy MOŻE BYĆ spowodowany żądaniem XMLHttpRequest w głównym wątku z flagą asynchroniczną ustawioną na false.
https://xhr.spec.whatwg.org/#synchronous-flag :
Przyszłym kierunkiem jest zezwolenie na XMLHttpRequests tylko w wątkach roboczych. Wiadomość ma być ostrzeżeniem w tym zakresie.
źródło
console.log
wysyła te ostrzeżenia?Miałem również ten sam problem, ale udało mi się go rozwiązać, wprowadzając async: true. Wiem, że jest to domyślnie prawda, ale działa, gdy piszę to wprost
źródło
Debuger na żywo programu Visual Studio 2015/2017 wstrzykuje kod zawierający przestarzałe wywołanie.
źródło
Czasami konieczne jest załadowanie skryptu ajax, ale opóźnienie przygotowania dokumentu do momentu załadowania skryptu.
jQuery obsługuje to z
holdReady()
funkcją.Przykładowe użycie:
Rzeczywiste ładowanie skryptu jest asynchroniczne ( bez błędów ), ale efekt jest synchroniczny, jeśli reszta kodu JavaScript działa po przygotowaniu dokumentu .
Dokumentacja:
https://api.jquery.com/jquery.holdready
AKTUALIZACJA 7 stycznia 2019 r
Z JQMIGRATE :
źródło
Aby uniknąć tego ostrzeżenia, nie używaj:
w dowolnych wywołaniach $ .ajax (). Jest to jedyna przestarzała funkcja XMLHttpRequest.
Domyślnie jest to
jQuery ma przestarzałe synchroniczne żądanie XMLHTTP
źródło
@Webgr częściowa odpowiedź faktycznie pomogła mi debugować to ostrzeżenie @ logu konsoli, szkoda, że inna część tej odpowiedzi przyniosła tyle głosów negatywnych :(
W każdym razie oto, jak dowiedziałem się, co było przyczyną tego ostrzeżenia w moim przypadku:
W moim przypadku inna wtyczka ładowała 2 biblioteki .js po każdym wywołaniu ajax, które absolutnie nie były wymagane ani konieczne. Wyłączenie nieuczciwej wtyczki usunęło ostrzeżenie z dziennika. Od tego momentu możesz albo spróbować rozwiązać problem samodzielnie (np. Ograniczyć ładowanie skryptów do określonych stron lub zdarzeń - jest to zbyt specyficzne dla odpowiedzi tutaj) lub skontaktować się z twórcą wtyczki innej firmy, aby go rozwiązać.
Mam nadzieję, że to komuś pomoże.
źródło
Patrzyłem na wszystkie imponujące odpowiedzi. Myślę, że powinien dostarczyć kod, który daje mu problem. Biorąc pod uwagę poniższy przykład, jeśli masz skrypt do linku do jquery w page.php, dostaniesz to powiadomienie.
źródło
Otrzymuję takie ostrzeżenie w następującym przypadku:
1) plik1, który zawiera
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
. Strona ma pola wprowadzania. Wpisuję wartość w polu wprowadzania i klikam przycisk. Jquery wysyła dane wejściowe do zewnętrznego pliku php.2) zewnętrzny plik php zawiera także jquery, aw zewnętrznym pliku php także
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
. Bo jeśli to dostanie ostrzeżenie.Usunięty
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
z zewnętrznego pliku php i działa bez ostrzeżenia.Jak rozumiem przy ładowaniu pierwszego pliku (file1), ładuję
jquery-1.10.2.js
i ponieważ strona nie ładuje się ponownie (wysyła dane do zewnętrznego pliku php za pomocą jquery$.post
), tojquery-1.10.2.js
dalej istnieje. Więc nie trzeba go ponownie ładować.źródło
Dostałem ten wyjątek, kiedy ustawiłem adres URL w zapytaniu, np. „Example.com/files/text.txt”. Zmieniłem adres URL na „ http://example.com/files/text.txt ” i ten wyjątek zniknął.
źródło
Mam ten wyjątek dotyczący dołączania jednego skryptu can.js do innego, np.
źródło
W aplikacji MVC otrzymałem to ostrzeżenie, ponieważ otwierałem okno Kendo metodą zwracającą View () zamiast PartialView (). View () próbował ponownie pobrać wszystkie skrypty strony.
źródło
Zdarzyło mi się to w ZF2. Próbowałem załadować zawartość modalną, ale wcześniej zapomniałem wyłączyć układ.
Więc:
źródło
Podobnie jak @Nycen, dostałem również ten błąd z powodu linku do Cloudfare. Mój był dla wtyczki Select2 .
aby to naprawić właśnie usunąłem
i błąd zniknął.
źródło
press F12
F1
."Don't show chrome Data Saver warning"
- ustaw to pole wyboru."Log XMLHTTPRequest"
- ustaw także to pole wyboru.Cieszyć się
źródło
Zostało to rozwiązane w moim przypadku.
Ta odpowiedź została wstawiona w tym linku
/programming/28322636/synchronous-xmlhttprequest-warning-and-script
źródło
W moim przypadku było to spowodowane skryptem flexie, który był częścią aplikacji „CDNJS Selections” oferowanej przez Cloudflare .
Według Cloudflare „Ta aplikacja jest przestarzała w marcu 2015 r.”. Wyłączyłem go i wiadomość natychmiast zniknęła.
Możesz uzyskać dostęp do aplikacji, odwiedzając https://www.cloudflare.com/a/cloudflare-apps/twojadomena.com
Uwaga: jest to kopia mojej odpowiedzi w tym wątku Ostrzeżenie synchronicznego XMLHttpRequest i <skrypt> (odwiedziłem oba, szukając rozwiązania)
źródło
Naprawiłem to za pomocą poniższych kroków:
źródło
W moim konkretnym przypadku renderowałem częściowo Railsy, bez
render layout: false
których ponownie renderowałem cały układ, łącznie ze wszystkimi skryptami w<head>
tagu. Dodanierender layout: false
do akcji kontrolera naprawiło problem.źródło
Dla mnie problem polegał na tym, że w żądaniu OK oczekiwałem, że odpowiedź ajax będzie dobrze sformatowanym ciągiem HTML, takim jak tabela, ale w tym przypadku serwer napotkał problem z żądaniem, przekierowując na stronę błędu, i dlatego
<script
zwróciłem kod HTML strony błędu ( gdzieś był tag. Konsola zarejestrowała odpowiedź ajax i wtedy zdałem sobie sprawę, że nie jest to, czego się spodziewałem, a następnie przystąpiłem do debugowania.źródło
Pytanie pojawiło się w 2014 roku i jest to rok 2019, więc myślę, że dobrze jest poszukać lepszej opcji.
Możesz po prostu użyć
fetch
interfejsu API w Javascript, co zapewnia większą elastyczność.na przykład zobacz ten kod
źródło