La mayoría de las otras respuestas están respondiendo a cómo lidiar con esto. Me gustaría ver, muy brevemente, en por qué asíncrono es bueno en este caso.
De hecho, más en el navegador Javascript es asíncrono. Tome, por ejemplo, este código:
document.getElementById('foo').onclick = function() {
alert('foo clicked');
};
document.getElementById('bar').onclick = function() {
alert('bar clicked');
};
¿Qué se ejecutará primero? No lo sabe, debido a la asincronicidad inherente al modelo de navegador (o, de hecho, a la mayoría de los códigos de eventos). Ejecuta código cuando ocurre un evento. Usted configura el documento, luego espera a que ocurra el evento, y su código podría ejecutarse en todo tipo de órdenes diferentes, dependiendo de qué eventos ocurran primero. El código JavaScript debe ejecutarse durante toda la vida de la página, no solo cuando se crea por primera vez.
en general La programación de Javascript (o al menos, la programación de Javascript más allá del nivel más simple) a menudo va a ser asincrónica. Además, tiene mucho sentido que las solicitudes HTTP sean asíncronas también.
Primero, como implica en su pregunta, hacer que el código sea sincrónico bloquearía la ejecución. Es decir, probablemente no desee hacer que una animación espere dos segundos para comenzar porque está haciendo una solicitud HTTP de dos líneas más adelante. Los tiempos de respuesta del servidor pueden ser (a) irregulares y (b) lentos, por lo que no tiene sentido que el diseño de su aplicación dependa de la velocidad de respuesta de su servidor.
En segundo lugar, y lo que es más importante, su usuario no va a dejar de usar la página porque la secuencia de comandos realiza una llamada AJAX. A su usuario no le importa A su usuario probablemente le importe que su comportamiento normal onscroll
no funcione porque su secuencia de comandos está actualmente vinculada a una solicitud AJAX no relacionada. Para vincularse con la naturaleza asíncrona de toda la programación de JavaScript del navegador, la gran mayoría de las llamadas HTTP deben ser no bloqueantes, asincrónicas.
La primera 'A' en 'AJAX' significa asincrónico. – Gareth
Puede establecer la opción 'async: true'. Las solicitudes sincrónicas pueden bloquear temporalmente el navegador, deshabilitando cualquier acción mientras la solicitud está activa. No recomendado. – jasssonpet
@Gareth Sabía que la A representaba asincrónicamente, sin embargo, siempre pensé que esto se refería al hecho de que la solicitud se realiza sin "recargar" la página, es decir, hacer la solicitud http "principal" de nuevo, por lo tanto, la página es 'no sincronizado' con la solicitud http original que entregó la página. – rgvcorley