JavaScript console.log причинява грешка: "Синхронното XMLHttpRequest на главната нишка е отпаднало..."

Добавях логове в конзолата, за да проверявам състоянието на различни променливи, без да използвам дебъгъра на Firefox.

Въпреки това на много места, където добавям console.log във файла main.js, получавам следната грешка вместо моите прекрасни малки ръкописни съобщения към себе си:

Synchronous XMLHttpRequest on the main thread is deprecated because of its damrimental effects to the end user's experience. За повече помощ http://xhr.spec.whatwg.org/

Какви алтернативи или обвивки за console.log мога да добавя към кода си, които няма да предизвикат тази грешка?

Дали го правя погрешно?

Това ми се случи, когато бях мързелив и включих таг за скрипт като част от съдържанието, което се връщаше. Ето защо:

Частично HTML съдържание:

<div> 
 SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script> 

Изглежда, поне в моя случай, че ако върнете HTML съдържание по този начин чрез xhr, ще накарате jQuery да направи повикване, за да получи този скрипт. Това извикване се извършва с асинхронен флаг false, тъй като се предполага, че имате нужда от скрипта, за да продължите зареждането.

В ситуации като тази би било по-добре да разгледате някаква рамка за свързване и просто да върнете JSON обект или в зависимост от бекенда и шаблонирането си бихте могли да промените начина, по който зареждате скриптовете си.

Можете също така да използвате jQuery's getScript(), за да вземете съответните скриптове. Ето една играчка, Тя е просто копие на примера на jQuery, но не виждам никакви предупреждения, когато скриптовете се зареждат по този начин.

Пример

<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>

[http://jsfiddle.net/49tkL0qd/][1]

Коментари (11)

Предупредителното съобщение МОЖЕ ДА СЕ дължи на заявка за XMLHttpRequest в рамките на основната нишка с флаг async, зададен на false.

https://xhr.spec.whatwg.org/#synchronous-flag:

Синхронна XMLHttpRequest извън работниците е в процес на се премахва от уеб платформата, тъй като има вредни последици за на крайния потребител'. (Това е дълъг процес, който отнема много години.) Разработчиците не трябва да подават false за аргумента async, когато глобалната среда на JavaScript е среда на документ. Потребителски агенти силно се препоръчва да предупреждават за такава употреба в инструментите за разработчици и могат да експериментират с хвърляне на изключение InvalidAccessError, когато това се случва.

Бъдещата посока е да се разрешат само XMLHttpRequests в работни нишки. Съобщението е предназначено да бъде предупреждение в тази насока.

Коментари (3)

Аз също се сблъсках със същия проблем, но успях да го реша, като поставих async: true. Знам, че по подразбиране е true, но работи, когато го напиша изрично

$.ajax({
   async: true,   // this will solve the problem
   type: "POST",
   url: "/Page/Method",
   contentType: "application/json",
   data: JSON.stringify({ ParameterName: paramValue }),
});
Коментари (3)