Wie viele andere verwendet meine Website jQuery. Wenn ich die Entwicklertools öffne, wird eine Warnung angezeigt, die besagt, dass XMLHTTPRequest lautet
veraltet wegen seiner nachteiligen Auswirkungen auf die Erfahrung des Endbenutzers.
Ich fuhr fort und las einen Teil der Dokumentation , aber es war ziemlich technisch. Kann jemand die Konsequenzen einer Umstellung von XMLHTTPRequest auf WHATWG in einfachen Worten erklären? Es heißt, es sei 2012 passiert.
Außerdem heißt es in der Dokumentation, dass Synchronous XMLHttpRequest außerhalb von Workern gerade von der Webplattform entfernt wird. Wenn dies passiert, wenn ein Benutzeragent sie in einem Dienst hatte, müssen sie dann ihren vorhandenen Code ändern?
Antworten:
Verwenden Sie nicht, um diese Warnung zu vermeiden:
in einem Ihrer
$.ajax()
Anrufe. Dies ist die einzige FunktionXMLHttpRequest
, die veraltet ist.Die Standardeinstellung ist
async: true
: Wenn Sie diese Option überhaupt nicht verwenden, sollte Ihr Code sicher sein, wenn die Funktion jemals wirklich entfernt wird.Dies wird jedoch wahrscheinlich nicht der Fall sein - es wird möglicherweise aus den Standards entfernt, aber ich wette, Browser werden es noch viele Jahre lang unterstützen. Wenn Sie also aus irgendeinem Grund wirklich synchrones AJAX benötigen, können Sie
async: false
die Warnungen verwenden und einfach ignorieren. Es gibt jedoch gute Gründe, warum synchrones AJAX als schlechter Stil angesehen wird. Daher sollten Sie wahrscheinlich versuchen, einen Weg zu finden, dies zu vermeiden. Und die Leute, die Flash-Anwendungen geschrieben haben, hätten wahrscheinlich auch nie gedacht, dass sie verschwinden würden, aber sie werden gerade auslaufen.Beachten Sie,
Fetch
dass die zu ersetzende APIXMLHttpRequest
nicht einmal eine synchrone Option bietet.quelle
$.ajax
.jquery.i18n.properties.js
aber es gibt keinen expliziten Aufruf von meiner Seite,$.ajax.
vielleicht intern, aber nicht sicher..properties
Dateien. Es wird wahrscheinlich synchrones AJAX verwendet, was diese Warnung verursacht.Die akzeptierte Antwort ist korrekt, aber ich habe eine andere Ursache gefunden, wenn Sie unter ASP.NET mit Visual Studio 2013 oder höher entwickeln und sicher sind, dass Sie keine synchronen Ajax-Anforderungen gestellt oder Skripte an der falschen Stelle definiert haben.
Die Lösung besteht darin, die Funktion "Browser-Link" zu deaktivieren, indem Sie "Browser-Link aktivieren" in der Dropdown-Liste der VS-Symbolleiste deaktivieren, die durch das kleine Aktualisierungssymbol im Uhrzeigersinn angezeigt wird. Sobald Sie dies tun und die Seite neu laden, sollten die Warnungen aufhören!
Dies sollte nur beim lokalen Debuggen geschehen, aber es ist immer noch schön, die Ursache der Warnungen zu kennen.
quelle
web.config
durch Zugabe von<add key="vs:EnableBrowserLink" value="false" />
innen<appSettings>
wie hier beschrieben: poconosystems.com/software-development/... .Dies geschah mir, indem ich kurz vor dem Ende des Körperteils einen Link zu externen js außerhalb des Kopfes hatte. Sie wissen, eine davon:
<script src="http://somesite.net/js/somefile.js">
Es hatte nichts mit JQuery zu tun.
Sie würden wahrscheinlich dasselbe sehen, wenn Sie so etwas tun:
Aber ich habe diese Idee nicht getestet.
quelle
Es wurde als Kommentar von @ henri-chan erwähnt , aber ich denke, es verdient etwas mehr Aufmerksamkeit:
Wenn Sie den Inhalt eines Elements mit jQuery / javascript mit neuem HTML aktualisieren und dieses neue HTML
<script>
Tags enthält , werden diese synchron ausgeführt und lösen so diesen Fehler aus. Gleiches gilt für Stylesheets.Sie wissen, dass dies geschieht, wenn (mehrere) Skripte oder Stylesheets wie
XHR
im Konsolenfenster geladen werden . (Feuerfuchs).quelle
Keine der vorherigen Antworten (die alle korrekt sind) war für meine Situation geeignet: Ich verwende den
async
Parameter in nichtjQuery.ajax()
und füge kein Skript-Tag als Teil des zurückgegebenen Inhalts hinzu:Meine Situation ist, dass ich zwei AJAX-Anfragen nacheinander aufrufe, um zwei Divs gleichzeitig zu aktualisieren:
Wenn ich auf
a.anchor3
klicke, wird das Warnflag ausgelöst. Ich habe das Problem behoben, indem ich den Aufruf von f2 durch dieclick()
Funktion ersetzt habe:quelle
Mein Workabout: Ich verwende asynchrone Anforderungen, um den Code in einen Puffer zu kopieren. Ich habe eine Schleife, die jede Sekunde den Puffer überprüft. Wenn der Speicherauszug im Puffer angekommen ist, führe ich den Code aus. Ich benutze auch eine Auszeit. Für den Endbenutzer funktioniert die Seite so, als würden synchrone Anforderungen verwendet.
quelle
$.ajax({ url : "example.com", async : true /* default is true */ }).done(function(response){ // Process the dump })
Hoffe ich habe nichts falsch gelesen.Wenn wir das Skript in einer Teilansicht laden, tritt dieses Problem auf
Diese Lösung funktioniert gut für mich
quelle