Como muitos outros, meu site está usando jQuery. Quando abro as ferramentas do desenvolvedor, vejo um aviso que diz que XMLHTTPRequest é
descontinuado devido aos seus efeitos prejudiciais à experiência do usuário final.
Continuei e li parte da documentação , mas era bastante técnica. Alguém pode explicar as consequências de mudar de XMLHTTPRequest para WHATWG em termos simples? Diz que aconteceu em 2012.
Além disso, a documentação diz que Synchronous XMLHttpRequest fora dos workers está em processo de remoção da plataforma web, quando isso acontece, se um agente do usuário os tiver em um serviço, eles precisam modificar o código existente?
Respostas:
Para evitar esse aviso, não use:
em qualquer uma de suas
$.ajax()
chamadas. Este é o único recursoXMLHttpRequest
obsoleto.O padrão é
async: true
, portanto, se você nunca usar essa opção, seu código estará seguro se o recurso for realmente removido.No entanto, provavelmente não será - ele pode ser removido dos padrões, mas aposto que os navegadores continuarão a suportá-lo por muitos anos. Portanto, se você realmente precisa do AJAX síncrono por algum motivo, pode usar
async: false
e simplesmente ignorar os avisos. Mas há bons motivos pelos quais AJAX síncrono é considerado um estilo ruim, então você provavelmente deve tentar encontrar uma maneira de evitá-lo. E as pessoas que escreveram aplicativos em Flash provavelmente nunca pensaram que ele iria desaparecer, mas agora está em processo de extinção.Observe que a
Fetch
API que está substituindoXMLHttpRequest
nem mesmo oferece uma opção síncrona.fonte
$.ajax
.jquery.i18n.properties.js
mas não há uma chamada explícita do meu lado para$.ajax.
Talvez internamente, mas não tenho certeza..properties
arquivos. Provavelmente, ele está usando AJAX síncrono para fazer isso, causando este aviso.A resposta aceita está correta, mas eu encontrei outra causa se você estiver desenvolvendo em ASP.NET com Visual Studio 2013 ou superior e tiver certeza de que não fez nenhuma solicitação ajax síncrona ou definiu scripts no lugar errado.
A solução é desativar o recurso "Link do navegador" desmarcando "Habilitar link do navegador" na lista suspensa da barra de ferramentas do VS, indicada pelo pequeno ícone de atualização apontando no sentido horário. Assim que você fizer isso e recarregar a página, os avisos devem parar!
Isso só deve acontecer durante a depuração local, mas ainda é bom saber a causa dos avisos.
fonte
web.config
adicionando<add key="vs:EnableBrowserLink" value="false" />
dentro<appSettings>
conforme descrito aqui: poconosystems.com/software-development/… .Isso aconteceu comigo por ter um link para js externos fora da cabeça pouco antes do final da seção do corpo. Você sabe, um destes:
<script src="http://somesite.net/js/somefile.js">
Não tinha nada a ver com JQuery.
Você provavelmente veria o mesmo fazendo algo assim:
Mas não testei essa ideia.
fonte
Foi mencionado como um comentário por @henri-chan , mas acho que merece um pouco mais de atenção:
Quando você atualiza o conteúdo de um elemento com novo html usando jQuery / javascript, e este novo html contém
<script>
tags, elas são executadas de forma síncrona e, portanto, acionando este erro. O mesmo vale para as folhas de estilo.Você sabe que isso está acontecendo quando vê (vários) scripts ou folhas de estilo sendo carregados como
XHR
na janela do console. (Raposa de fogo).fonte
Nenhuma das respostas anteriores (que estão todas corretas) foi adequada para minha situação: Eu não uso o
async
parâmetro emjQuery.ajax()
e não incluo uma tag de script como parte do conteúdo que estava sendo retornado como:Minha situação é que estou chamando duas solicitações AJAX consecutivamente com o objetivo de atualizar duas divs ao mesmo tempo:
Quando clico em
a.anchor3
, surge o sinalizador de aviso. Resolvi o problema substituindo f2 invocando pelaclick()
função:fonte
Meu workabout: eu uso solicitações assíncronas despejando o código em um buffer. Eu tenho um loop verificando o buffer a cada segundo. Quando o dump chega ao buffer, executo o código. Eu também uso um tempo limite. Para o usuário final, a página funciona como se as solicitações síncronas fossem usadas.
fonte
$.ajax({ url : "example.com", async : true /* default is true */ }).done(function(response){ // Process the dump })
Espero não ter lido nada mal.Se carregarmos o script em vista parcial, esse problema virá
Esta solução está funcionando bem para mim
fonte