JavaScript console.log provoca un error: "Synchronous XMLHttpRequest en el hilo principal es deprecated..."

He estado añadiendo registros a la consola para comprobar el estado de diferentes variables sin usar el depurador de Firefox.

Sin embargo, en muchos lugares en los que añado un console.log en mi archivo main.js, recibo el siguiente error en lugar de mis encantadores mensajitos escritos a mano para mí:

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. Para más ayuda http://xhr.spec.whatwg.org/

¿Qué alternativas o envoltorios para console.log puedo añadir a mi uso del código que no cause este error?

¿Estoy "haciendo mal"?

Esto me ocurrió cuando fui perezoso e incluí una etiqueta de script como parte del contenido que se devolvía. Así:

Contenido HTML parcial:

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

Parece, al menos en mi caso, que si devuelves contenido HTML como ese vía xhr, harás que jQuery haga una llamada para obtener ese script. Esa llamada ocurre con un flag async false ya que asume que necesitas el script para seguir cargando.

En situaciones como esta, sería mejor buscar un marco de vinculación de algún tipo y simplemente devolver un objeto JSON, o dependiendo de tu backend y plantillas podrías cambiar la forma de cargar tus scripts.

También puedes usar jQuery's getScript() para coger los scripts relevantes. Aquí hay un fiddle, es sólo una copia directa del ejemplo de jQuery, pero no veo ninguna advertencia cuando los scripts se cargan de esa manera.

**Ejemplo

<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>

[http://jsfiddle.net/49tkL0qd/][1]

Comentarios (11)

El mensaje de advertencia PUEDE SER debido a una solicitud XMLHttpRequest dentro del hilo principal con la bandera asíncrona establecida en falso.

https://xhr.spec.whatwg.org/#synchronous-flag:

Las peticiones XMLHttpRequest sincrónicas fuera de los workers están en proceso de de ser eliminado de la plataforma web ya que tiene efectos perjudiciales para la experiencia del usuario final'. (Este es un proceso largo que lleva muchos años). Los desarrolladores no deben pasar false para el argumento async cuando el El entorno global de JavaScript es un entorno de documento. Los agentes de usuario se recomienda encarecidamente que adviertan de tal uso en las herramientas de desarrollo y pueden experimentar con lanzar una excepción InvalidAccessError cuando cuando ocurra.

La dirección futura es sólo permitir XMLHttpRequests en hilos de trabajo. El mensaje pretende ser una advertencia a tal efecto.

Comentarios (3)

Yo también me enfrentaba al mismo problema pero pude solucionarlo poniendo async: true. Sé que por defecto es true pero funciona cuando lo escribo explícitamente

$.ajax({
   async: true,   // this will solve the problem
   type: "POST",
   url: "/Page/Method",
   contentType: "application/json",
   data: JSON.stringify({ ParameterName: paramValue }),
});
Comentarios (3)