Podobnie jak wiele innych, moja witryna korzysta z jQuery. Kiedy otwieram narzędzia programistyczne, widzę ostrzeżenie, że XMLHTTPRequest jest
przestarzałe ze względu na jego szkodliwy wpływ na wrażenia użytkownika końcowego.
Kontynuowałem i przeczytałem część dokumentacji , ale była dość techniczna. Czy ktoś może w prosty sposób wyjaśnić konsekwencje przejścia z XMLHTTPRequest na WHATWG? Mówi, że stało się to w 2012 roku.
Ponadto dokumentacja mówi, że synchroniczny XMLHttpRequest poza pracownikami jest w trakcie usuwania z platformy internetowej, a kiedy tak się dzieje, jeśli agent użytkownika miał je w usłudze, czy muszą modyfikować swój istniejący kod?
Odpowiedzi:
Aby uniknąć tego ostrzeżenia, nie używaj:
w każdym z twoich
$.ajax()
połączeń. To jedyna funkcja,XMLHttpRequest
która jest przestarzała.Wartość domyślna to
async: true
, więc jeśli nigdy nie użyjesz tej opcji, twój kod powinien być bezpieczny, jeśli funkcja zostanie kiedykolwiek naprawdę usunięta.Jednak pewnie nie będzie - może zostanie usunięty ze standardów, ale założę się, że przeglądarki będą go wspierać przez wiele lat. Więc jeśli z jakiegoś powodu naprawdę potrzebujesz synchronicznego AJAX, możesz użyć
async: false
i po prostu zignorować ostrzeżenia. Ale są dobre powody, dla których synchroniczny AJAX jest uważany za kiepski styl, więc prawdopodobnie powinieneś spróbować znaleźć sposób, aby tego uniknąć. A ludzie, którzy pisali aplikacje Flash, prawdopodobnie też nigdy nie myśleli, że to zniknie, ale obecnie jest w trakcie wycofywania.Zwróć uwagę,
Fetch
że zastępujący interfejs APIXMLHttpRequest
nie oferuje nawet opcji synchronicznej.źródło
$.ajax
.jquery.i18n.properties.js
ale po mojej stronie nie ma wyraźnego wezwania do$.ajax.
Być może wewnętrznie, ale nie jestem pewien..properties
plików. Prawdopodobnie używa do tego synchronicznego AJAX, powodując to ostrzeżenie.Przyjęta odpowiedź jest poprawna, ale znalazłem inną przyczynę, jeśli programujesz w ASP.NET z Visual Studio 2013 lub nowszym i jesteś pewien, że nie wykonałeś żadnych synchronicznych żądań ajax lub nie zdefiniowałeś żadnych skryptów w niewłaściwym miejscu.
Rozwiązaniem jest wyłączenie funkcji „Łącze przeglądarki”, odznaczając opcję „Włącz łącze przeglądarki” na liście rozwijanej paska narzędzi VS, oznaczonej małą ikoną odświeżania skierowaną w prawo. Jak tylko to zrobisz i przeładujesz stronę, ostrzeżenia powinny się zatrzymać!
Powinno to mieć miejsce tylko podczas lokalnego debugowania, ale nadal dobrze jest znać przyczynę ostrzeżeń.
źródło
web.config
, dodając<add key="vs:EnableBrowserLink" value="false" />
wewnątrz,<appSettings>
jak opisano tutaj: poconosystems.com/software-development/… .Zdarzyło mi się to, gdy miałem łącze do zewnętrznego js poza głową tuż przed końcem sekcji ciała. Wiesz, jeden z tych:
<script src="http://somesite.net/js/somefile.js">
Nie miało to nic wspólnego z JQuery.
Prawdopodobnie zobaczyłbyś to samo robiąc coś takiego:
Ale nie przetestowałem tego pomysłu.
źródło
Wspomniał o tym jako komentarz @ henri-chan , ale myślę, że zasługuje na więcej uwagi:
Kiedy aktualizujesz zawartość elementu nowym kodem HTML za pomocą jQuery / javascript, a ten nowy html zawiera
<script>
tagi, są one wykonywane synchronicznie, powodując tym samym ten błąd. To samo dotyczy arkuszy stylów.Wiesz, że dzieje się tak, gdy widzisz ładowanych (wiele) skryptów lub arkuszy stylów, tak jak
XHR
w oknie konsoli. (firefox).źródło
Żadna z poprzednich odpowiedzi (wszystkie są poprawne) nie pasowała do mojej sytuacji: nie używam
async
parametru injQuery.ajax()
i nie dołączam tagu skryptu jako części zwracanej treści, na przykład:Moja sytuacja jest taka, że wywołuję kolejno dwa żądania AJAX w celu zaktualizowania dwóch elementów div w tym samym czasie:
Kiedy klikam
a.anchor3
, pojawia się flaga ostrzegawcza.Rozwiązałem problem, zastępując wywołanie f2 przezclick()
funkcję:źródło
Mój problem: używam asynchronicznych żądań zrzucających kod do bufora. Mam pętlę sprawdzającą bufor co sekundę. Kiedy zrzut dotarł do bufora, wykonuję kod. Używam też limitu czasu. Dla użytkownika końcowego strona działa tak, jakby były używane synchroniczne żądania.
źródło
$.ajax({ url : "example.com", async : true /* default is true */ }).done(function(response){ // Process the dump })
Mam nadzieję, że niczego nie przeczytałem.Jeśli załadujemy skrypt w częściowym widoku, ten problem się pojawi
To rozwiązanie działa dobrze dla mnie
źródło