jQuery a déprécié synchrone XMLHTTPRequest

comme beaucoup d'autres, mon site utilise jQuery. Quand j'ouvre les outils de développement, je vois un avertissement qui dit que XMLHTTPRequest est

obsolète en raison de ses effets néfastes pour l'expérience de l'utilisateur final.

j'ai continué et j'ai lu une partie de la documentation , mais c'était assez technique. Quelqu'un peut-il expliquer les conséquences du passage de XMLHTTPRequest à WHATWG en simple les termes? Ça dit que c'est arrivé en 2012.

en outre, la documentation dit que synchrone XMLHttpRequest en dehors des travailleurs est en cours d'être retiré de la plate-forme web, lorsque cela se produit, si un agent utilisateur les avait dans un service, ont-ils besoin de modifier leur code existant?

104
demandé sur informatik01 2015-01-02 03:53:03

6 réponses

Pour éviter cet avertissement, ne pas utiliser:

async: false

dans l'un de vos appels $.ajax() . C'est la seule caractéristique de XMLHttpRequest qui est dépréciée.

la valeur par défaut est async: true , donc si vous n'utilisez jamais cette option, votre code devrait être sûr si la fonctionnalité est vraiment supprimé (il ne sera probablement pas -- il peut être retiré des normes, mais je parie que les navigateurs continueront à le soutenir pendant de nombreuses années).

119
répondu Barmar 2015-01-02 01:30:26

la réponse acceptée est correcte, mais j'ai trouvé une autre cause si vous développez sous ASP.NET avec Visual Studio 2013 ou plus et êtes sûr que vous n'avez pas fait de requêtes ajax synchrones ou défini de scripts au mauvais endroit.

la solution est de désactiver la fonction" Browser Link "en décochant" Enable Browser Link " dans la liste déroulante de VS toolbar indiquée par la petite icône de rafraîchissement pointant dans le sens des aiguilles d'une montre. Dès que vous faites ceci et rechargez la page, le avertissements devraient arrêter!

Disable Browser Link

cela ne devrait se produire que lors du débogage local, mais il est toujours agréable de connaître la cause des avertissements.

60
répondu Sam 2015-09-16 17:46:07

cela m'est arrivé en ayant un lien avec JS externe à l'extérieur de la tête juste avant la fin de la section de corps. Vous savez, l'un d'eux:

<script src="http://somesite.net/js/somefile.js">

cela n'avait rien à voir avec JQuery.

vous verriez probablement la même chose faire quelque chose comme ça:

var script = $("<script></script>");
script.attr("src", basepath + "someotherfile.js");
$(document.body).append(script);

Mais je n'ai pas testé cette idée.

14
répondu Dave Friend 2015-05-21 17:51:32

aucune des réponses précédentes (qui sont toutes correctes) n'était adaptée à ma situation: je n'utilise pas le paramètre async dans jQuery.ajax() et je n'inclus pas d'étiquette de script dans le contenu qui était retourné comme: "15198090920"

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

Ma situation est que j'appelle deux demandes AJAX consécutivement dans le but de mettre à jour deux divs en même temps:

function f1() {
     $.ajax(...); // XMLHTTP request to url_1 and append result to div_1
}

function f2() {
     $.ajax(...); // XMLHTTP request to url_2 and append result to div_2
}

function anchor_f1(){
$('a.anchor1').click(function(){
     f1();
})
}

function anchor_f2(){
$('a.anchor2').click(function(){
     f2();
});
}

// the listener of anchor 3 the source of problem
function anchor_problem(){
$('a.anchor3').click(function(){
     f1();
     f2();
});
}

anchor_f1();
anchor_f2();
anchor_problem();

quand je clique sur a.anchor3 , il soulève l'avertissement drapeau.J'ai résolu le problème en remplaçant f2 par click() fonction:

function anchor_problem(){
$('a.anchor_problem').click(function(){
     f1();
     $('a.anchor_f2').click();
});
}
3
répondu whiteletters in blankpapers 2016-04-20 17:31:15

mon workabout: j'utilise des requêtes asynchrones déchargeant le code dans un tampon. J'ai une boucle qui vérifie le tampon à chaque seconde. Quand le dump est arrivé au buffer, j'exécute le code. J'utilise aussi une fonction de temporisation. Pour l'utilisateur, la page fonctionne comme si les requêtes synchrones serait utilisé.

1
répondu runback 2015-04-10 07:48:46

il a été mentionné comme un commentaire par @henri-chan , mais je pense qu'il mérite plus d'attention:

lorsque vous mettez à jour le contenu d'un élément avec du nouveau html en utilisant jQuery/javascript, et que ce nouveau html contient des balises <script> , celles-ci sont exécutées de manière synchrone et déclenchent ainsi cette erreur. En va de même pour les feuilles de style.

vous savez que cela se produit lorsque vous voyez des scripts (multiples) ou les feuilles de style étant chargées en tant que XHR dans la fenêtre de la console. (Firefox.)

0
répondu Hugo Delsing 2018-10-02 09:11:58