Добавях логове в конзолата, за да проверявам състоянието на различни променливи, без да използвам дебъгъра на 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>
[
][1]Предупредителното съобщение МОЖЕ ДА СЕ дължи на заявка за XMLHttpRequest в рамките на основната нишка с флаг async, зададен на false.
https://xhr.spec.whatwg.org/#synchronous-flag:
Синхронна XMLHttpRequest извън работниците е в процес на се премахва от уеб платформата, тъй като има вредни последици за на крайния потребител'. (Това е дълъг процес, който отнема много години.) Разработчиците не трябва да подават false за аргумента async, когато глобалната среда на JavaScript е среда на документ. Потребителски агенти силно се препоръчва да предупреждават за такава употреба в инструментите за разработчици и могат да експериментират с хвърляне на изключение InvalidAccessError, когато това се случва.
Бъдещата посока е да се разрешат само XMLHttpRequests в работни нишки. Съобщението е предназначено да бъде предупреждение в тази насока.
Аз също се сблъсках със същия проблем, но успях да го реша, като поставих async: true. Знам, че по подразбиране е true, но работи, когато го напиша изрично
$.ajax({
async: true, // this will solve the problem
type: "POST",
url: "/Page/Method",
contentType: "application/json",
data: JSON.stringify({ ParameterName: paramValue }),
});