J'ai ajouté des journaux à la console pour vérifier l'état des différentes variables sans utiliser le débogueur Firefox.
Cependant, dans de nombreux endroits où j'ajoute un console.log
dans mon main.js
fichier, je reçois l'erreur suivante au lieu de mes beaux petits messages manuscrits:
Synchronous XMLHttpRequest sur le thread principal est obsolète en raison de ses effets néfastes sur l'expérience de l'utilisateur final. Pour plus d'aide http://xhr.spec.whatwg.org/
Quelles alternatives ou wrappers pour console.log
puis-je ajouter à mon utilisation de code qui ne provoquera pas cette erreur?
Suis-je "en train de mal faire"?
jquery
debugging
firefox
backbone.js
console.log
Nathan Basanese
la source
la source
<script>$.ajaxPrefilter(function( options, originalOptions, jqXHR ) { options.async = true; });</script>
cela supprimera l'avertissement. Vous pouvez voir ici pour le même problème.Réponses:
Cela m'est arrivé lorsque j'étais paresseux et j'ai inclus une balise de script dans le contenu renvoyé. En tant que tel:
Contenu HTML partiel:
Il semble, au moins dans mon cas, que si vous renvoyez du contenu HTML comme celui-ci via xhr, vous demanderez à jQuery de faire un appel pour obtenir ce script. Cet appel se produit avec un indicateur asynchrone false car il suppose que vous avez besoin du script pour continuer le chargement.
Dans des situations comme celle-ci, vous seriez mieux servi en examinant un cadre de liaison quelconque et en renvoyant simplement un objet JSON, ou en fonction de votre backend et des modèles, vous pouvez changer la façon dont vous chargez vos scripts.
Vous pouvez également utiliser jQuery
getScript()
pour récupérer des scripts pertinents. Voici un violon, c'est juste une copie directe de l'exemple jQuery, mais je ne vois aucun avertissement lancé lorsque les scripts sont chargés de cette façon.Exemple
http://jsfiddle.net/49tkL0qd/
la source
<script>
comme vous l'avez dit dans un rappel d'un appel asynchrone ajax. Mon appel ajax est asynchrone mais dans le rappel que je fais$('#object').html(data)
où les données sont un morceau dehtml
avec<script>
et lorsque cette ligne est exécutée l'erreur apparaît dans lejs console
. +1 !!! merci:)
.Le message d'avertissement PEUT ÊTRE dû à une demande XMLHttpRequest dans le thread principal avec l'indicateur async défini sur false.
https://xhr.spec.whatwg.org/#synchronous-flag :
La direction future est d'autoriser uniquement XMLHttpRequests dans les threads de travail. Le message est destiné à être un avertissement à cet effet.
la source
console.log
envoie ces avertissements?J'étais également confronté au même problème, mais j'ai pu le résoudre en mettant async: true. Je sais que c'est par défaut vrai mais ça marche quand je l'écris explicitement
la source
Le débogueur en direct de Visual Studio 2015/2017 injecte du code qui contient l'appel obsolète.
la source
Parfois, il est nécessaire d'ajax charger un script mais de retarder le document prêt jusqu'à ce que le script soit chargé.
jQuery prend cela en charge avec la
holdReady()
fonction.Exemple d'utilisation:
Le chargement réel du script est asynchrone ( pas d'erreur ), mais l'effet est synchrone si le reste de votre JavaScript s'exécute une fois le document prêt .
Documentation:
https://api.jquery.com/jquery.holdready
MISE À JOUR 7 janvier 2019
De JQMIGRATE :
la source
Pour éviter cet avertissement, n'utilisez pas:
dans l'un de vos appels $ .ajax (). C'est la seule fonctionnalité de XMLHttpRequest qui est obsolète.
La valeur par défaut est
jQuery a déprécié le XMLHTTPRequest synchrone
la source
La réponse partielle @Webgr m'a effectivement aidé à déboguer cet avertissement @ journal de la console, dommage que l'autre partie de cette réponse ait apporté tant de votes négatifs :(
Quoi qu'il en soit, voici comment j'ai découvert quelle était la cause de cet avertissement dans mon cas:
Dans mon cas, un autre plugin chargeait 2 bibliothèques .js après chaque appel ajax, qui n'étaient absolument pas nécessaires ni nécessaires. La désactivation du plugin escroc a supprimé l'avertissement du journal. À partir de là, vous pouvez soit essayer de résoudre le problème vous-même (par exemple, limiter le chargement des scripts à certaines pages ou événements - c'est beaucoup trop spécifique pour une réponse ici) ou contacter un développeur de plugin tiers pour le résoudre.
J'espère que cela aide quelqu'un.
la source
J'ai regardé les réponses toutes impressionnantes. Je pense qu'il devrait fournir le code qui lui pose problème. Étant donné l'exemple ci-dessous, si vous avez un script à lier à jquery dans page.php, vous obtenez cet avis.
la source
Je reçois un tel avertissement dans le cas suivant:
1) fichier1 qui contient
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
. La page a des champs de saisie. J'entre une valeur dans le champ de saisie et je clique sur le bouton. Jquery envoie une entrée vers un fichier php externe.2) le fichier php externe contient également jquery et dans le fichier php externe j'ai également inclus
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
. Parce que si je reçois l'avertissement.Supprimé
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
du fichier php externe et fonctionne sans avertissement.Si je comprends bien lors du chargement du premier fichier (file1), je charge
jquery-1.10.2.js
et comme la page ne se recharge pas (elle envoie des données vers un fichier php externe en utilisant jquery$.post
), puisjquery-1.10.2.js
continue d'exister. Il n'est donc plus nécessaire de le charger.la source
J'ai obtenu cette exception lorsque j'ai défini l'URL dans une requête comme "example.com/files/text.txt". J'ai changé l'URL en " http://example.com/files/text.txt " et cette exception a disparu.
la source
Et j'ai eu cette exception pour inclure un script can.js dans un autre, par exemple,
la source
Dans une application MVC, j'ai reçu cet avertissement car j'ouvrais une fenêtre Kendo avec une méthode qui renvoyait un View (), au lieu d'un PartialView (). La vue () tentait de récupérer à nouveau tous les scripts de la page.
la source
Ça m'arrivait en ZF2. J'essayais de charger le contenu Modal mais j'ai oublié de désactiver la mise en page avant.
Donc:
la source
Comme @Nycen, j'ai également eu cette erreur en raison d'un lien vers Cloudfare. Le mien était pour le plugin Select2 .
pour le réparer, je viens de retirer
et l'erreur a disparu.
la source
press F12
F1
."Don't show chrome Data Saver warning"
- cochez cette case."Log XMLHTTPRequest"
- cochez également cette case.Prendre plaisir
la source
Ceci est résolu dans mon cas.
Cette réponse a été insérée dans ce lien
/programming/28322636/synchronous-xmlhttprequest-warning-and-script
la source
Dans mon cas, cela était dû au script flexie qui faisait partie de l'application "CDNJS Selections" proposée par Cloudflare .
Selon Cloudflare "Cette application est obsolète en mars 2015". Je l'ai éteint et le message a disparu instantanément.
Vous pouvez accéder aux applications en visitant https://www.cloudflare.com/a/cloudflare-apps/yourdomain.com
NB: ceci est une copie de ma réponse sur ce thread Synchronous XMLHttpRequest warning et <script> (j'ai visité les deux lors de la recherche d'une solution)
la source
J'ai corrigé cela avec les étapes ci-dessous:
la source
Dans mon cas particulier, je rendais un Rails partiel sans
render layout: false
lequel je restituais la disposition entière, y compris tous les scripts de la<head>
balise. L'ajoutrender layout: false
à l'action du contrôleur a résolu le problème.la source
Pour moi, le problème était que dans une demande OK, je m'attendais à ce que la réponse ajax soit une chaîne HTML bien formatée telle qu'une table, mais dans ce cas, le serveur rencontrait un problème avec la demande, redirigeant vers une page d'erreur, et retournait donc le code HTML de la page d'erreur (qui avait une
<script
balise quelque part. J'ai console consigné la réponse ajax et c'est alors que j'ai réalisé que ce n'était pas ce que j'attendais, puis j'ai procédé au débogage.la source
La question a été soulevée en 2014 et c'est 2019, donc je suppose qu'il est bon de chercher une meilleure option.
Vous pouvez simplement utiliser l'
fetch
api en Javascript qui vous offre plus de flexibilité.par exemple, voir ce code
la source