2009-09-25 34 views
187

Específicamente, ¿cómo difiere del valor predeterminado (async: true)?¿Qué hace "async: false" en jQuery.ajax()?

¿En qué circunstancias querría establecer explícitamente async en async, y tiene algo que ver con la prevención de que se desencadenen otros eventos en la página?

+0

Sí, me parece que debería llamarse algo distinto de "Ajax" (JavaScript asíncrono y XML) si no es asíncrono ... – devlord

+0

tiene un aspecto similar a esta pregunta: [stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-asynchronous-ajax-req] (http://stackoverflow.com/questions/133310/how-can) -i-get-jquery-to-perform-a-synchronous-rather-as-synchronous-ajax-req) hace que la llamada sea sincrónica ... – CSharpAtl

+0

Asincrónica significa que la secuencia de comandos enviará una solicitud al servidor y continuará ejecución sin esperar la respuesta. Tan pronto como se recibe la respuesta, se activa un evento del navegador, que a su vez permite al script ejecutar acciones asociadas. – SagarPPanchal

Respuesta

229

¿Tiene algo que ver con la prevención de otros eventos en la página de disparar?

Sí.

Configurar async en falso significa que la instrucción que está llamando tiene que completarse antes de que se pueda invocar la siguiente instrucción en su función. Si establece async: true, esa instrucción comenzará su ejecución y se invocará la siguiente instrucción, independientemente de si la declaración async ya se ha completado.

Para ver una visión más clara: jQuery ajax success anonymous function scope

+10

Siempre me he preguntado cómo se logró esto, ya que JavaScript no está enhebrado. – Matt

+1

Entonces, ¿es como una forma barata de hacer una ejecución diferida? – Lorenzo

+3

@ L.DeLeo - no, en absoluto - diferidos son otra forma de gestionar la complejidad de las llamadas a funciones asincrónicas - 'async: false' * elimina la asincronía de la llamada completamente *. La llamada a 'ajax' ** bloquea ** - el código que sigue no se ejecuta hasta que el servidor ha respondido. –

15

Si deshabilita la recuperación asincrónica, su secuencia de comandos se bloqueará hasta que se haya completado la solicitud. Es útil para realizar una secuencia de solicitudes en un orden conocido, aunque considero que las devoluciones de llamada asíncronas son más limpias.

+0

Joe: eso dependería de si tiene hilos de trabajo en segundo plano. –

3

Un caso de uso es para hacer una llamada ajax antes de que el usuario cierra la ventana o sale de la página. Esto sería como eliminar algunos registros temporales en la base de datos antes de que el usuario pueda navegar a otro sitio o cerrar el navegador.

$(window).unload(
     function(){ 
      $.ajax({ 
      url: 'your url', 
      global: false, 
      type: 'POST', 
      data: {}, 
      async: false, //blocks window close 
      success: function() {} 
     }); 
    }); 
+37

Ninguna cantidad de JavaScript detendrá el cierre de una ventana del navegador – jammykam

18

Async:False llevará a cabo la ejecución de código de reposo. Una vez que obtenga la respuesta de ajax, solo entonces, el resto del código se ejecutará.

5

De

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

XMLHttpRequest síncrono fuera de los trabajadores está en proceso de ser retirado 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 el argumento asíncrono falso cuando el entorno global de JavaScript es un entorno de documento. Se recomienda encarecidamente a los agentes de usuario que adviertan sobre dicho uso en las herramientas de desarrollo y que experimenten lanzando una excepción InvalidAccessError cuando ocurra. La dirección futura es solo permitir XMLHttpRequests en subprocesos de trabajo. El mensaje está destinado a ser una advertencia a tal efecto.

71
  • async:false = Código detuvo. (Otro código espera para que esto termine.)
  • async:true = Código continuación. (Nada se detuvo. Otro código se no esperaba.)

Tan simple como esto.

+2

JavaScript tiene un solo subproceso. Nada corre en paralelo. – 4castle

+1

Muy buena explicación ... –

Cuestiones relacionadas