Ich habe der Konsole Protokolle hinzugefügt, um den Status verschiedener Variablen zu überprüfen, ohne den Firefox-Debugger zu verwenden.
Allerdings erhalte ich an vielen Stellen, an denen ich eine "console.log" in meine "main.js"-Datei einfüge, die folgende Fehlermeldung anstelle meiner schönen kleinen handgeschriebenen Nachrichten an mich selbst:
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. Für weitere Hilfe http://xhr.spec.whatwg.org/
Welche Alternativen oder Wrapper für console.log
kann ich in meinem Code verwenden, die diesen Fehler nicht verursachen?
Mache ich es falsch?
Das ist mir passiert, als ich zu faul war und ein Skript-Tag als Teil des zurückgegebenen Inhalts einfügte. Als solches:
Teilweiser HTML-Inhalt:
<div>
SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script>
Es scheint, zumindest in meinem Fall, dass, wenn Sie HTML-Inhalte wie diese über xhr zurückgeben, Sie jQuery veranlassen, einen Aufruf zu machen, um das Skript zu erhalten. Dieser Aufruf erfolgt mit einem async-Flag false, da er davon ausgeht, dass Sie das Skript zum weiteren Laden benötigen.
In Situationen wie dieser sind Sie besser bedient, wenn Sie ein Bindungs-Framework verwenden und nur ein JSON-Objekt zurückgeben oder je nach Backend und Templating ändern, wie Sie Ihre Skripte laden.
Sie könnten auch jQuery's getScript()
verwenden, um relevante Skripte zu holen. Hier ist ein Fiddle, Es ist nur eine direkte Kopie des jQuery-Beispiels, aber ich sehe keine Warnungen, wenn Skripte auf diese Weise geladen werden.
Beispiel
<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>
[
][1]Die Warnmeldung KANN auf eine XMLHttpRequest-Anforderung innerhalb des Hauptthreads zurückzuführen sein, bei der das async-Flag auf false gesetzt ist.
https://xhr.spec.whatwg.org/#synchronous-flag:
Die synchrone XMLHttpRequest-Anforderung außerhalb von Workern wird derzeit aus der Webplattform entfernt, da sie nachteilige Auswirkungen auf
der Endbenutzer's Erfahrung. (Dies ist ein langer Prozess, der viele Jahre dauert.) Entwickler dürfen nicht false für das async-Argument übergeben, wenn die globale JavaScript-Umgebung eine Dokumentenumgebung ist. Benutzer-Agenten werden dringend aufgefordert, vor einer solchen Verwendung in Entwickler-Tools zu warnen und können mit dem Auslösen einer InvalidAccessError-Ausnahme experimentieren, wenn es auftritt.
In Zukunft sollen XMLHttpRequests nur noch in Worker-Threads zugelassen werden. Die Meldung soll eine Warnung in diesem Sinne sein.
Ich war auch vor dem gleichen Problem, aber in der Lage, es zu beheben, indem Sie async: true. Ich weiß, es ist standardmäßig wahr, aber es funktioniert, wenn ich es explizit schreiben
$.ajax({
async: true, // this will solve the problem
type: "POST",
url: "/Page/Method",
contentType: "application/json",
data: JSON.stringify({ ParameterName: paramValue }),
});